ViewWillAppear中的代码不起作用,为什么?

时间:2016-08-01 01:25:21

标签: ios swift xcode uitabbarcontroller

我的应用程序以标签栏控制器开始,然后每个标签都带有导航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,但视图没有任何反应。它不起作用。为什么呢?

1 个答案:

答案 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)

}