在viewDidLoad

时间:2018-03-23 10:16:35

标签: swift swift4

我在UINavigationBar.tintColor设置viewDidLoad()时遇到意外行为。

我在ViewController中嵌入了两个ViewControllers SecondViewControllerUINavigationControllerUIButton正在触发从ViewControllerSecondViewController的segue。两个ViewControllers都设置了UIBarButtonItem个自定义UIImage

在我的SecondViewController我想要一个不同的tintColor我的导航栏。

这是我的代码:

import UIKit

class ViewController: UIViewController {

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.tintColor = nil
    }
}

class SecondViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor(red: 100/255, green: 200/255, blue: 0/255, alpha: 1.0)
    }
}

故事板看起来像这样:

Storyboard

当发生从ViewControllerSecondViewController的转换时,右侧设置的UIBarButtonItem稍微摇摆不定。我期待这个项目改变它的颜色,但不要以任何方式摇晃。

有没有人对此行为有任何建议?

(我也尝试在viewWillAppear中设置tintColor,但这并没有解决问题。如果我在viewDidAppear中设置了tintColor,一切都很好。但这对于我的用例来说已经太晚了。)

如果您需要进一步的信息,请提供建议让我知道我将提供所需的任何信息。

GIF显示此问题:

enter image description here

1 个答案:

答案 0 :(得分:1)

请尝试更改viewDidLayoutSubviews()中的颜色。

viewDidLayoutSubviews()被调用以通知视图控制器其视图刚刚布置了其子视图。 这是解决此类问题的小技巧。

从Apple开发者网站了解详情:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621398-viewdidlayoutsubviews