ios - 在单独的 View Controller 上使用scrollViewDidScroll时无法更改UINavigationBar的样式

标签 ios swift uinavigationcontroller

我在 UINavigationController 中嵌入了三个 View Controller 。 FirstViewController 导航到 SecondTableViewController,后者又导航到 ThirdDetailViewController

我遇到的问题是使用 SecondTableViewController 中的 scrollViewDidScroll 方法自定义 status barUINavigationBar 的样式时 它还会覆盖堆栈中紧随其后的其他 View Controller 以及所有状态栏样式。

有人知道如何防止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/

相关文章:

ios - iOS中使用glsl将yv12转rgb,附结果图

ios - 仅在我们开始编辑文本时显示图像

ios - 弄错时差

ios - 从一个 Storyboard过渡到另一个

ios - iOS Google Drive SDK-文件夹的查询字符串似乎不起作用

arrays - 使用数组中的一个索引

ios - 备份还原后 SecItemCopyMatching 返回 -26276

Xcode 7 beta swift 应用程序在运行时崩溃并出现 EXC_BAD_ACCESS 错误

iphone - 动画 :NO 时 pushViewController 不工作

ios - 导航栏标题仅更改一次(不再变白然后返回)