我在UINavigationBar.tintColor
设置viewDidLoad()
时遇到意外行为。
我在ViewController
中嵌入了两个ViewControllers SecondViewController
和UINavigationController
。 UIButton
正在触发从ViewController
到SecondViewController
的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)
}
}
故事板看起来像这样:
当发生从ViewController
到SecondViewController
的转换时,右侧设置的UIBarButtonItem
稍微摇摆不定。我期待这个项目改变它的颜色,但不要以任何方式摇晃。
有没有人对此行为有任何建议?
(我也尝试在viewWillAppear
中设置tintColor,但这并没有解决问题。如果我在viewDidAppear
中设置了tintColor,一切都很好。但这对于我的用例来说已经太晚了。)
如果您需要进一步的信息,请提供建议让我知道我将提供所需的任何信息。
GIF显示此问题:
答案 0 :(得分:1)
请尝试更改viewDidLayoutSubviews()
中的颜色。
viewDidLayoutSubviews()
被调用以通知视图控制器其视图刚刚布置了其子视图。
这是解决此类问题的小技巧。
从Apple开发者网站了解详情:https://developer.apple.com/documentation/uikit/uiviewcontroller/1621398-viewdidlayoutsubviews