如何在Swift中为单个视图自定义导航栏背景?

3

我有一个带有多个视图和控制器的应用程序,但是在其中一些视图中,我想将顶部导航栏透明化并使用白色文本。我在该视图的控制器中编写了以下代码:

override func viewDidLoad() {
    super.viewDidLoad()

    let bar:UINavigationBar! =  self.navigationController?.navigationBar

    bar.tintColor = UIColor.whiteColor()
    bar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
    bar.shadowImage = UIImage()
    bar.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
}

当我打开应用程序时,其他视图上的顶部栏看起来正常,当我打开这个视图时,顶部栏看起来像我想要的。但是当我从这个视图导航到其他视图时,其他视图继承了上面代码对顶部栏所做的更改。
有没有办法防止这种情况发生,使导航栏仅针对该特定视图进行更改,同时保持其余部分不变?
提前致谢!
1个回答

7

每个导航控制器只有一个导航栏,因此如果在一个控制器中更改了它,那么所有控制器的导航栏都会被更改。要解决这个问题,在viewWillDisappear(或viewDidDisappear)中将其更改回你想要的其他控制器即可。如果您返回到相同的实例时,另一个控制器被弹出,您可能还需要将您展示的代码移动到viewWillAppear中。


1
谢谢,那绝对帮助解决了问题。不过似乎需要重复几次相同的代码(对于ViewWillDisappear和ViewWillAppear)。 - Hols

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接