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

标签: Xcode ios Swift
发布时间: 2017/3/6 23:21:44
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的应用程序启动选项卡栏控制器,然后每个选项卡导航 VC。我想隐藏在底部的选项卡栏,每当我开始导航到第二的 VC,而且还更改导航栏的颜色为橙色的颜色,这里 2 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)

}

它会打印︰ 假与真每次浏览器中打开此 VC,但认为发生了什么事。它不工作。为什么呢?

解决方法 1:

您不能使用 UIAppearance 代理来改变已经位于视图层次结构中的对象的外观。 从 UIAppearance 文档:

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)

}
官方微信
官方QQ群
31647020