Я пытаюсь изменить цвет кнопки "Настройки" на белый, но не могу изменить его.
Я пробовал оба из них:
navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()
но без изменений, он все равно выглядит следующим образом:
Как сделать эту кнопку белой?
Вы можете изменить цвет глобального оттенка в раскадровке, щелкнув пустое место на доске и выбрав на правой панели инструментов "Показать инспектор файлов", и вы увидите в нижней части панели инструментов параметр "Глобальный оттенок".
Этот код меняет цвет стрелки
self.navigationController.navigationBar.tintColor = UIColor.whiteColor();
Если это не работает, используйте следующий код:
self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()
Swift 3 Notes
UIColor.whiteColor()
и аналогичные были упрощены до UIColor.white
Кроме того, многие ранее неявные опции были изменены на явные, поэтому вам может понадобиться:
self.navigationController?.navigationBar =
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
работал для меня (Swift 2.2)
Очень легко настроить в раскадровке:
Вы должны использовать это:
navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
Вы можете использовать как этот. Поместите его внутри AppDelegate.swift
.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().translucent = false
UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]
return true
}
В Swift 4 вы можете решить эту проблему, используя:
let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black
Swift 3
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.tintColor = UIColor.white
}
В Swift3, чтобы установить кнопку "Назад" на red
.
self.navigationController?.navigationBar.tintColor = UIColor.red
Используйте этот код в классе AppDelegate
, внутри didFinishLaunchingWithOptions
.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor = .white
}
Swift 3
Самый верный ответ неверен для Swift 3.
Правильный код для изменения цвета:
self.navigationController?.navigationBar.tintColor = UIColor.white
Если вы хотите изменить цвет, измените UIColor.white выше на нужный цвет
Изменить полную тему приложения
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UINavigationBar.appearance().tintColor = .white
return true
}
Изменить конкретный контроллер
let navController = UINavigationController.init(rootViewController: yourViewController)
navController.navigationBar.tintColor = .red
present(navController, animated: true, completion: nil)
UINavigationController
?
self.navigationController?.navigationBar.tintColor = UIColor.redColor()
Этот фрагмент делает магию. Вместо redColor измените его по своему желанию.
Если у вас уже есть кнопка "Назад" в вашем контроллере вида "Настройки", и вы хотите изменить цвет кнопки "Назад" на контроллере вида "Информация о платеже" на что-то еще, вы можете сделать это внутри контроллера "Настройки" для подготовки к segue вот так:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "YourPaymentInformationSegue"
{
//Make the back button for "Payment Information" gray:
self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray
}
}
при использовании swift 2.0
self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
Давайте попробуем этот код:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.whiteColor() // Back buttons and such
navigationBarAppearace.barTintColor = UIColor.purpleColor() // Bar background color
navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()] // Title text color
self.window?.backgroundColor = UIColor.whiteColor()
return true
}
Все настройки ответов UINavigationBar.appearance().tintColor
конфликтуют с документацией Apple в UIAppearance.h
.
Примечание для iOS7: на
tintColor
свойствоtintColor
перемещено вUIView
, и теперь имеет специальное наследуемое поведение, описанное вUIView.h
. Это унаследованное поведение может конфликтовать с прокси внешнего вида, и поэтомуtintColor
теперь неtintColor
с прокси внешнего вида.
В XCode вам нужно щелкнуть по команде каждое свойство, которое вы хотите использовать с прокси внешнего вида, чтобы проверить файл заголовка и убедиться, что свойство UI_APPEARANCE_SELECTOR
.
Таким образом, правильный способ покрасить панель навигации в фиолетовый цвет, а заголовок и кнопки - по всему приложению через прокси внешнего вида:
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white
Обратите внимание, что UIBarButtonItem
не является подклассом UIView
а скорее NSObject
. Таким образом, его свойство tintColor
не является унаследованным tintColor
от UIView
.
К сожалению, UIBarButtonItem.tintColor
не аннотирован UI_APPEARANCE_SELECTOR
- но это мне кажется ошибкой документации. Ответ от Apple Engineering на этом радаре гласит, что он поддерживается.
Добавьте следующий код в функцию didFinishLaunchingWithOptions в AppDelegate.swift
var navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade
// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
Это работает для меня, iOS 9.0 +
Для Swift 2.0, чтобы изменить цвет оттенков цвета навигационной панели, текст заголовка и назад изменился с помощью следующего в AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//Navigation bar tint color change
UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)
//Back button tint color change
UINavigationBar.appearance().barStyle = UIBarStyle.Default
UINavigationBar.appearance().tintColor = UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)
//Navigation Menu font tint color change
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
return true
}
Это будет решено с помощью этой строки в - (void) viewDidLoad:
self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
Не знаю, почему никто не упомянул об этом... но я делал именно то, что вы делали в моем viewDidLoad
... и он не работал. Затем я поместил свой код в viewWillAppear
, и все это сработало.
Вышеупомянутое решение состоит в том, чтобы изменить один элемент barbutton. Если вы хотите изменить цвет для каждого навигационного блока в своем коде, выполните этот ответ.
В основном изменение самого класса с помощью appearance()
похоже на глобальное изменение во всех экземплярах этого представления в вашем приложении. Подробнее см. здесь
У вас есть один выбор, спрячьте свою кнопку назад и сделайте это самостоятельно. Затем установите его цвет.
Я сделал это:
self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()