滑动 ViewController 时出现导航栏错误

Posted

技术标签:

【中文标题】滑动 ViewController 时出现导航栏错误【英文标题】:Navigation bar Bug while Sliding ViewController 【发布时间】:2016-08-01 09:40:31 【问题描述】:

我有一个视图控制器,它是第二个视图控制器,需要一个导航栏。第一个是不需要导航栏的控制器,第三个视图控制器需要导航栏。

根据堆栈,第三个视图控制器将不是堆栈顶部。

我已经在 2nd View Controller 中实现了这些方法:

override func viewWillAppear(animated: Bool) 

    super.viewWillAppear(animated)
    if self.navigationController?.navigationBarHidden == true
        self.navigationController?.navigationBarHidden = false
    

    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
    self.navigationController?.navigationBar.tintColor = Quikr_Util.colorWithHexString("#0083cb")


override func viewWillDisappear(animated: Bool) 
    super.viewWillDisappear(animated)
    if self.navigationController?.navigationBarHidden == false
        self.navigationController?.navigationBarHidden = true
    

如果使用back 条形按钮从第三个视图控制器返回到第二个视图控制器,则一切正常。

当我开始从一个视图控制器滑动到另一个视图控制器时,事情变得一团糟,例如,当我滑动一半然后释放时。

这意味着从 3rd 滑到 2nd 但在两者之间释放,所以它转到 3rd View Controller 而不是第二个。

隐藏和取消隐藏视图导航栏的最佳方式可能是什么。

其次,滑动是如何工作的,滑动时会调用哪些函数?

【问题讨论】:

您能否更具体地谈谈“事情变得一团糟?” 【参考方案1】:

第一个问题

要隐藏和显示导航控制器,在第二和第三视图控制器中,您可以使用:

隐藏:

navigationController?.setNavigationBarHidden(true, animated: false)

显示:

navigationController?.setNavigationBarHidden(false, animated: false)

实际上不需要检查它是否隐藏。

对于第二个问题,你可以使用 UIGestureRecognizer

编辑: 为了清楚起见,不是在同一个文件中隐藏和显示,而是在需要的 swift 文件中隐藏和显示viewDidAppear()

【讨论】:

两个不同的视图控制器文件 我尝试这样做,我将导航栏隐藏在第二个视图控制器的 viewdidload 中,并在第三个中再次显示它。然后当我按回时,我可以在第二个视图控制器中再次看到该栏。 我应该放在每个 View Controller 的 viewDidAppear() 中吗? 每一个你有变化的。如果你隐藏在VC2中,你需要在VC1和VC3中显示

以上是关于滑动 ViewController 时出现导航栏错误的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器中滑动 viewController

导航抽屉 - 禁用滑动

如何找出属于当前 viewController 的导航控制器?

UIImageView 的延迟时间

检查当前 viewController 类是不是为 IOS 7 中的 Person ViewController 时出现问题

viewController 出现时出现黑色