Как правильно настроить UITabBar и UITabBarItem на iOS 7 и iOS 8?
Я так много гуглю, но нигде не нахожу прямой и консолидированная ответ.
Я хочу настроить мойUITabBarController
такое, что:
- the
UITabBar
сам полностью черный - цвет текста заголовков элементов белый в не выделена государство
- цвет текста заголовков элементов красный в выделена государство
- использовать разноцветные иконки в панели вкладок
1. Поворот UITabBar
черный
Я предполагаю, что мне нужно использовать UIAppearance
API для этого, и на самом деле я смог превратить UITbarBar
черный использование: [[UITabBar appearance] setBarTintColor:[UIColor blackColor]];
.
2. и 3. Изменить цвет заголовков элементов
тем не менее, цвет текстовых элементов, похоже, не делает то, что я хочу, после поиска в интернете, следующие решения имели смысл для меня, но он только изменяет не выделена состояние до белого, выделена также остается белым...
NSDictionary *titleAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
[[UITabBarItem appearance] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal];
UIColor *titleHighlightedColor = [UIColor redColor];
NSDictionary *highlightedTitleAttributes = @{NSForegroundColorAttributeName : titleHighlightedColor};
[[UITabBarItem appearance] setTitleTextAttributes:highlightedTitleAttributes forState:UIControlStateHighlighted];
4. Разноцветные предметы
о разноцветных значках, до сих пор подход был просто установить значки в раскадровки такой:
но это не делает то, что я хочу, он показывает только весь значок в сером цвете, когда элемент не выбранные. Когда элемент выбран, значок полностью исчезает.
это оригинальный значок:
вот как это выглядит, когда элемент не избранные:
и вот он в выбранном изложении, как уже упоминалось, значок полностью исчезает:
Итак, мой вопрос заключается в том, как именно я могу достичь вышеупомянутых требований. Чего мне сейчас не хватает? Лучше ли мне делать все в коде, чем в Раскадровки?
Примечание: я нацелен на версии iOS больше 7.0, поэтому, пожалуйста, включите любую конкретную информацию о версии, если поведение отличается между iOS 7 и iOS 8.
2 ответов
у меня была та же проблема, что и у вас. Насколько я знаю, нет разницы для разных версий iOS.
Я решил это программно следующим образом:
-
поворот черного цвета бара работает следующим образом (Вы уже сказали это) (в AppDelegate):
UITabBar.appearance().barTintColor = UIColor.blackColor()
-
чтобы установить цвет заголовка для разных состояний, я использовал этот код (в AppDelegate):
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.redColor()], forState:.Selected) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.whiteColor()], forState:.Normal)
-
(и 4.) Вы можете получить разные цвета элементов, разноцветные значки и разные цвета элементов для разных состояний, установив изображение программно и изменив режим рендеринга (
imageWithRenderingMode:
) кUIImageRenderingMode.AlwaysOriginal
, это выглядит следующим образом (сделайте это в первом классе контроллера вида для всех ваших контроллеров вида):var recentsItem = self.tabBarController!.tabBar.items![0] as UITabBarItem var recentsItemImage = UIImage(named:"recents.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) var recentsItemImageSelected = UIImage(named: "recentsSelected.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) recentsItem.image = recentsItemImage recentsItem.selectedImage = recentsItemImageSelected
Я надеюсь, что это помогает, если у вас возникли вопросы, не стесняйтесь спрашивать меня.
решение, предоставленное smudis, отлично, и потому что у меня недостаточно репутации, чтобы прокомментировать, я решил опубликовать 3-ю часть решения smudis в Objective-C, если это может кому-то помочь:
чтобы получить ссылку на tabBar введите приведенный выше код в приложение метода AppDelegate: didFinishLaunchingWithOptions:
UITabBarController *tbc = (UITabBarController*)self.window.rootViewController;
UITabBar *tb = tbc.tabBar;
затем корректировку изображения можно выполнить следующим образом:
for (UITabBarItem *tbi in tb.items) {
tbi.selectedImage = [tbi.selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
tbi.image = [tbi.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}