我的应用程序以标签栏控制器开始,然后每个标签都带有导航VC。每当我开始导航到第二个VC时,我希望在底部隐藏标签栏,并且还将导航栏的颜色更改为橙色,这是第二个VC中的代码:
override func viewWillAppear(animated: Bool) {
var tabBarHide = self.tabBarController!.tabBar.hidden
print(tabBarHide)
if !tabBarHide {
tabBarHide = true
}
print(tabBarHide)
UINavigationBar.appearance().barTintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1)
}
它确实打印出来:false&每次我导航到这个VC时都是true,但视图没有任何反应。它不起作用。为什么呢?
答案 0 :(得分:1)
您不能使用UIAppearance
代理来更改视图层次结构中已存在的对象的外观。来自UIAppearance
documentation:
iOS在视图进入窗口时应用外观更改,它不会更改已在窗口中的视图的外观。要更改当前在窗口中的视图的外观,请从视图层次结构中删除该视图,然后将其放回。
您可以直接修改活动导航栏的色调颜色:
self.navigationController?.navigationBar.tintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1)
至于您的标签栏未隐藏的原因,您正在修改本地变量,而不是标签栏的hidden
属性。你想要:
self.tabBarController?.tabBar.hidden = true
所以你的viewWillAppear
应该是这样的:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.tabBar.hidden = true
self.navigationController?.navigationBar.tintColor = UIColor.init(red: 247/255, green: 119/255, blue: 0/255, alpha: 1)
}