我在 UINavigationController
中嵌入了三个 View Controller 。 FirstViewController
导航到 SecondTableViewController
,后者又导航到 ThirdDetailViewController
。
我遇到的问题是使用 SecondTableViewController 中的
它还会覆盖堆栈中紧随其后的其他 View Controller 以及所有状态栏样式。 scrollViewDidScroll
方法自定义 status bar
和 UINavigationBar
的样式时
有人知道如何防止scrollViewDidScroll方法影响堆栈中的其他 View Controller 吗?
FirstViewController
override func viewWillAppear(animated: Bool) {
UIApplication.sharedApplication().statusBarStyle = .Default
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.whiteColor()
self.navigationController?.navigationBar.tintColor = UIColor.blackColor()
self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.translucent = true
}
第二个TableViewController
我根据用户向下滚动的距离来更改导航的样式,以融入内容或从内容中脱颖而出。
其他 View Controller 的样式会更改为该方法中设置的样式。
override func scrollViewDidScroll(scrollView: UIScrollView) {
let color = colorWheel()
if (scrollView.contentOffset.y > -60) {
UIApplication.sharedApplication().statusBarStyle = .Default
self.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.whiteColor()
self.navigationController?.navigationBar.tintColor = color.appColor
self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
self.navigationController?.view.backgroundColor = color.appColor
self.navigationController?.navigationBar.translucent = true
} else {
UIApplication.sharedApplication().statusBarStyle = .LightContent
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.clearColor()
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.barTintColor = UIColor.clearColor()
self.navigationController?.view.backgroundColor = UIColor.clearColor()
self.navigationController?.navigationBar.translucent = true
}
}
ThirdDetailViewController
override func viewWillAppear(animated: Bool) {
UIApplication.sharedApplication().statusBarStyle = .Default
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.whiteColor()
self.navigationController?.navigationBar.tintColor = UIColor.blackColor()
self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.translucent = true
}
最佳答案
还可以在 viewDidAppear
方法中更改导航属性。
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
UIApplication.sharedApplication().statusBarStyle = .Default
UIApplication.sharedApplication().statusBarStyle = .Default
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarPosition: .Any, barMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.backgroundColor = UIColor.whiteColor()
self.navigationController?.navigationBar.tintColor = UIColor.blackColor()
self.navigationController?.navigationBar.barTintColor = UIColor.whiteColor()
self.navigationController?.navigationBar.translucent = true
}
关于ios - 在单独的 View Controller 上使用scrollViewDidScroll时无法更改UINavigationBar的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36241914/