由于某种原因,我无法弄清楚为什么我无法在应用程序中更改导航栏按钮的tintColor
,而且我也不知道如何找出原因。您能推荐我如何调试此问题吗?
我将其添加到我的视图控制器的viewDidLoad中:
UINavigationBar.appearance().tintColor = .green
但是,什么都没有改变,并且后退按钮和Aa栏按钮保持默认的灰色。
导航+状态栏是半透明的,位于整个应用程序中viewcontroller
的背景颜色之上。
我可以在完全相同的测试应用中将barbutton
更改为.green(将其添加到vc的ViewDidLoad中,确保将barbutton图像资产设置为Template,以便它们将采用我设置的颜色)。但是无论出于何种原因,同一件事在我的应用程序原型中都不会改变。
是否有一些我可能不知道的常见原因?
已添加:工具栏按钮仅通过情节提要添加。
这是代码尝试通过1个viewcontroller的viewDidLoad更改其颜色的方法:
Class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UINavigationBar.appearance().tintColor = .green
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
}
}
答案 0 :(得分:5)
如果您要使用全局.ppk
代理,则不能在视图控制器中使用它。
如果要更改视图控制器的appearance()
中的tintColor
,则必须直接在控制器的viewDidLoad
实例上进行设置:
navigationController
要使用navigationController?.navigationBar.tintColor = .green
代理,并为导航栏设置全局appearance()
,必须在初始化导航控制器之前执行此操作。
例如,如果您在应用程序委托的tintColor
中进行操作,它将起作用:
application(_:didFinishLaunchingWithOptions:)
有关原因,请参见func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UINavigationBar.appearance().tintColor = .green
return true
}
文档:
https://developer.apple.com/documentation/uikit/uiappearance
“ iOS会在视图进入窗口时应用外观更改,它不会更改窗口中已有视图的外观。要更改窗口中当前视图的外观,请从视图中删除该视图层次结构,然后放回去。”
答案 1 :(得分:0)
导航栏颜色
要更改导航栏的背景颜色,请使用以下代码
navigationController?.navigationBar.barTintColor = .green
用所需的颜色更改.green
。
导航栏文本颜色
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.green]
用所需的颜色更改.green
。
答案 2 :(得分:0)
UINavigationBar.appearance().barTintColor = UIColor(hex:"YourColorcode")
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white,
NSFontAttributeName: UIFont(name:"AvenirNext-Medium", size:19.0)]
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white,
NSFontAttributeName: "YourFontName"], for: UIControlState.normal)