我想更改UIBarButton
中navigationBar
的颜色。为此,请在viewDidLoad:
中输入以下行:
navigationController?.navigationBar.tintColor = .white
一切正常,直到我开始注意到一些奇怪的东西。 UIBarButton
用于关闭UIViewController
。当按下它时,我只是解开了viewController
。但是,如果再次显示(viewController
,则UIBarButton
的颜色不是白色,它将得到应用程序的tintColor
。
进行一些调试之后,我注意到viewDidLoad:
仅在被撤消并再次显示后不再被调用。我的viewController
具有不同颜色的原因是因为我在UIBarButton
中更改了颜色。当然,当不调用viewDidLoad:
时,颜色不会改变。
对我来说,这是一个有趣的发现,即iOS并未针对已经提出的viewDidLoad:
调用viewDidLoad:
。可能是由于优化,因为每次绘制整个UI效率不高。
我对这个问题的解决方法可以是更改颜色,而不是UIViewController
,而是viewDidLoad:
。但是,解决问题的方法正确吗?在上述情况下为什么不调用viewDidAppear:
?
答案 0 :(得分:0)
您似乎创建并存储了视图控制器,但将其包装在let controller = YourModalViewController()
...
func presentMyModal() {
present(UINavigationController(rootViewController: controller))
}
中:
viewDidLoad
在这种情况下,您的extension YourModalViewController {
func wrappedInNC() -> UINavigationController {
let nc = UINavigationController(rootViewController: controller)
// Styling code.
return nc
}
}
方法将仅被调用一次,并且您将遇到视觉错误。如果要将模式的样式代码留在文件中,则可以创建实例函数,该函数将包装并设置样式后返回此控制器。
torrents