Изменение цвета оттенков UIBarButtonItem
У меня есть проект, использующий Storyboards, и всякий раз, когда я нажимаю контроллер вида с помощью segue, динамически созданная позиция кнопки панели всегда синяя.
![enter image description here]()
Это сводит меня с ума. Поскольку этот объект создается динамически, я не могу установить его цвет в IB (например, я сделал это с предыдущими элементами кнопки).
Среди решений, которые я пробовал:
- Установите его в приемник
viewDidLoad
-
Установите его в ресивере viewDidAppear
self.navigationItem.backBarButtonItem.tintColor = [UIColor whiteColor];
-
Когда я увидел, что это не совсем сработало, я попробовал вместо параметра leftBarButtonItem:
self.navigationItem.leftBarButtonItem.tintColor = [UIColor whiteColor];
-
Я попробовал следующий код (который я получил из других ответов SO) в своем делете приложения, когда вызывается новое представление, и перед нажатием нового представления:
[[UIBarButtonItem appearance] setTintColor:[UIColor whiteColor]];
Все ответы Google, которые я нашел, рекомендуют использовать приведенный выше код, но он не работает вообще для меня. Возможно, есть некоторые изменения в API-интерфейсе iOS 7? Независимо от того, как и где я пытаюсь установить "Категорий" на белый, он всегда является синим по умолчанию.
Ответы
Ответ 1
В iOS 7, чтобы установить цвет всех barButtonItems в вашем приложении, установите свойство tintColor
в окне приложения в AppDelegate.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.tintColor = [UIColor whiteColor];
return YES;
}
Более подробная информация в Руководстве по переходу на iOS 7 для Apple iOS 7 (в частности, в разделе "Использование цвета оттенка" ).
*** ИЛИ ***
Основываясь на некоторых комментариях, вы также можете добиться этого с помощью прокси-сервера UINavigationBar. Это повлияет на tintColor только для UIBarButtonItems, в отличие от установки tintColor в окне и влияния на все подъязыки этого окна.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
[UINavigationBar appearance].tintColor = [UIColor whiteColor];
}
return YES;
}
Ответ 2
Я думаю, что вы ищете свойство своего UINavigationBar. Попробуйте установить self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
См. раздел "Внешний вид навигационных баров": https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UINavigationBar.html#//apple_ref/doc/uid/TP40012857-UINavigationBar-SW1
Ответ 3
В Swift 3.0
let navigationBarAppearnce = UINavigationBar.appearance()
Навигационные панели tintColor влияет на цвет изображения обратного индикатора, заголовков кнопок и изображений кнопок.
navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)
Свойство barTintColor влияет на цвет самой панели
navigationBarAppearnce.tintColor = UIColor.white
Конечный код
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let navigationBarAppearnce = UINavigationBar.appearance()
navigationBarAppearnce.barTintColor = UIColor(red: 0.180, green: 0.459, blue: 0.733, alpha: 1.00)
navigationBarAppearnce.tintColor = UIColor.white
navigationBarAppearnce.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
//Change status bar color
UIApplication.shared.statusBarStyle = .lightContent
return true
}
![введите описание изображения здесь]()
Ответ 4
В iOS 8, если вы изменили цвет оттенка UIView для определенной цели, например, для брендинга UIAlertView, цвет оттенков для UIBarButtonItem в UIToolBar также изменился таким образом. Чтобы исправить это, просто напишите этот код
[UIView appearance].tintColor = SOME_COLOR;
[UIView appearanceWhenContainedIn:[UIToolbar class], nil].tintColor = BLACK_COLOR;
Для цвета оттенков UIBarButtonItem в UINavigationBar используется стандартный метод
[UINavigationBar appearance].tintColor = BLACK_COLOR;
Ответ 5
Чтобы изменить цвет определенного элемента (например, кнопки) в панели навигации:
В Objective-C
myButton.tintColor = [UIColor redColor];
Ответ 6
UITabBar.appearance().tintColor = UIColor.yellowColor()
Ответ 7
Это сработало для меня
AddBarButtonItem.setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.white], for: .normal)