Внешний вид UITabBarSelectionIndicatorImage не работает при первом запуске iOS7
У меня есть настроенный UITabBar и используйте следующий код в AppDelegate:
- (void)tabBarController:(MainUITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
[self customizeTabBar];
}
- (void)customizeTabBar {
NSLog(@"*******customizeTabBar*******");
UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set background for all UITabBars
[[UITabBar appearance] setBackgroundImage:tabBackground];
// Set tint color for the images for all tabbars
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
// Set selectionIndicatorImage for all tabbars
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab"]];
}
- (void)tabBarController:(MainUITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed
{
NSLog(@"*******didEndCustomizingViewControllers*******");
}
Все в порядке в iOS5 +, но в 7 при первой загрузке первого TabBarItem индикатор элемента белый, и кнопка, похоже, была выбрана, но изображение "selectedTab" не загружено.
Когда я нажимаю другую вкладку, новая вкладка красная и отображается правильно - так же, как и первый или любой элемент панели вкладок, выбранных после этого - он не работает только при первом запуске.
customizeTabBar вызывается, но выбранное изображение не появляется при первом запуске.
didEndCustomizingViewControllers, похоже, вообще не вызываются.
Это не работает в эмуляторе или устройстве на iOS7, но работает на iOS5, 6.
Любые идеи?
Спасибо заранее.
Ответы
Ответ 1
Устанавливая изображение индикатора выбора для панели вкладок прямо еще раз, кроме того, чтобы делать это по внешнему виду, работал у меня!
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
....
UITabBarController *tabBarContr = (UITabBarController *)self.window.rootViewController;
...
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tab_bar_selection_indicator.png"]];
// iOS7 hack: to make selectionIndicatorImage appear on the selected tab on the first app run
[[tabBarContr tabBar] setSelectionIndicatorImage:[UIImage imageNamed:@"tab_bar_selection_indicator.png"]];
return YES;
}
Ответ 2
Я вижу эту ту же самую проблему. Вот мой didFinishLaunching
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self applyStyleSheet];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.backgroundColor = [UIColor redColor];
self.window.tintColor = [UIColor whiteColor];
UITabBarController *tabBarController = [self setupTabBarController];
self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
return YES;
}
Вот как я настраиваю панель вкладок:
- (UITabBarController *)setupTabBarController
{
UITabBarController *tabBarController = [[UITabBarController alloc] init];
UINavigationController *nav1 = [[UINavigationController alloc] initWithRootViewController:[[FirstViewController alloc] init]];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:[[SecondViewController alloc] init]];
UINavigationController *nav3 = [[UINavigationController alloc] initWithRootViewController:[[ThirdViewController alloc] init]];
UINavigationController *nav4 = [[UINavigationController alloc] initWithRootViewController:[[FourthViewController alloc] init]];
UINavigationController *nav5 = [[UINavigationController alloc] initWithRootViewController:[[FifthViewController alloc] init]];
[tabBarController setViewControllers:@[nav1, nav2, nav3, nav4, nav5]];
return tabBarController;
}
И, наконец, это блок настройки панели вкладок:
- (void)applyStyleSheet
{
UITabBar *tabBar = [UITabBar appearance];
[tabBar setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]]];
[tabBar setTintColor:[UIColor whiteColor]];
[tabBar setSelectionIndicatorImage:[UIImage imageNamed:@"tab-selected"]];
[tabBar setSelectedImageTintColor:[UIColor whiteColor]];
}
Как указано, на первой вкладке не загружается изображение с вкладкой. Тем не менее, я добавил следующую строку после [self.window makeKeyAndVisible], чтобы моя вкладка запускалась с другой вкладкой, и на этой вкладке появилось изображение с табуляцией:
[tabBarController setSelectedIndex:1];
Итак, здесь мой финализированный файл didFinishLaunching с тонким взломом, который заставляет его работать:)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self applyStyleSheet];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
self.window.backgroundColor = [UIColor redColor];
self.window.tintColor = [UIColor whiteColor];
UITabBarController *tabBarController = [self setupTabBarController];
self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];
[tabBarController setSelectedIndex:1];
[tabBarController setSelectedIndex:0];
return YES;
}
Ответ 3
ОК.
не самый лучший из исправлений, но нужно отправить.
Измените код настройки в appdelegate и в файле xib проектов (это старый проект) в инспекторе атрибутов TabBars (с использованием xcode 5) - добавьте фоновый фон и выбор изображений вкладок.
Это работает для ios7 без необходимости какого-либо кода настройки в appdelegate.
Для pre iOS5 + 6 (это приложение поддерживает только 5+), однако нам все равно нужен код, поэтому я добавил простую проверку для версии и сохранил код как есть:
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
if(SYSTEM_VERSION_LESS_THAN(@"7.0"))
{
UIImage *tabBackground = [[UIImage imageNamed:@"unselectedtab"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set background for all UITabBars
[[UITabBar appearance] setBackgroundImage:tabBackground];
[[UINavigationBar appearance] setTintColor:[UIColor blackColor]];
// Set tint colour for the images for all tabbars
[[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];
// Set selectionIndicatorImage for all tabbars
[[UITabBar appearance] setSelectionIndicatorImage:nil];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"selectedtab.png"]];
}
Ответ 4
Я думаю, что у меня также была такая же проблема, когда я делал свой проект для нового приложения в iOS 7!
В iOS 7 было построено больше всего материала, поскольку все мы привыкли к другим.
Здесь, как я понял, мы все использовали StoryBoards и не смогли интегрировать этот Segues в наш код!:)
Поэтому я выбираю , чтобы не возиться с кодом, после того как я попробовал больше всего ответов StackOverFlow относительно этого!:) Потому что, почему вы хотите сделать это, когда вы предоставили Goody Good Конструктор интерфейсов (IB) и Инструмент для раскрутки рассказов?
Вопрос:
Когда мы установили выбранное изображение вкладки, фоновое изображение специально для панели вкладок, оно не показывает, какая вкладка выбрана с изображением, которое мы установили в нашем коде...???
Решение
Ниже приведены скриншоты моих настроек StoryBoard, которые я сделал для решения этой проблемы.
Выберите вкладку TabBarController на панели контура вашего документа:
![Select your TabBarController from your via document outline panel]()
Задайте настройки панели вкладок на панели "Утилиты":
![Set your settings for the Tab Bar from the Utilities Panel]()
Затем ваша программа настроена на запуск! Теперь он знает, что первая вкладка выбирается, когда приложение сначала показывает первый вкладку, а также какое изображение должно отображаться для всех индикаторов панели вкладок, когда каждый из них выбран!:)
надеюсь, что у вас есть ключ!
Если бы я помог тебе, я счастлив!!!
Но если я потратил впустую ваше время, я так жаль!!!:(
Но поверьте мне, это сработало мне как шарм!!!
Ответ 5
- (void)customizeTabBar {
UIImageView *customizeTabBar = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,320.0,50)];
customizeTabBar.image=[UIImage imageNamed:@"Tab_bar.png"];
firstTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab1.png"] highlightedImage:[UIImage imageNamed:@"tab11.png"]];
[firstTab setFrame:CGRectMake(8.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: firstTab];
secondTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab2"] highlightedImage:[UIImage imageNamed:@"tab22"]];
[secondTab setFrame:CGRectMake(115.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: secondTab];
thirdTab = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab3"] highlightedImage:[UIImage imageNamed:@"tab33"]];
[thirdTab setFrame:CGRectMake(223.0,01.0,90.0,49.0)];
[customizeTabBar addSubview: thirdTab];
self.tabBar.tag=10;
[self.tabBar addSubview:customizeTabBar];
}