【问题标题】:popViewController(animated: true) animation works slowpopViewController(animated: true) 动画运行缓慢
【发布时间】:2018-08-15 10:58:07
【问题描述】:

我在 imageView 上添加了一个点击手势识别器,所以当用户点击下面的图片时会调用下面的函数。

@objc func handleTap(_ sender: UITapGestureRecognizer) {

            self.navigationController?.popViewController(animated: true)
}

当我推送到细节视图控制器动画看起来很好并且工作流畅,但是当我使用上面的方法来 popViewController(animated: true) 动画不是那么流畅,甚至可能会冻结一秒钟。

我还使用 viewWillAppear 和 viewWillDisappear 方法在细节视图控制器中隐藏导航栏。我已经读到这可能会导致动画运行缓慢,但仍然无法找到解决此问题的答案。

  override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.isNavigationBarHidden = true
    }

    override func viewDidDisappear(_ animated: Bool) {
        super.viewWillAppear(animated)
        navigationController?.isNavigationBarHidden = false
    }

【问题讨论】:

  • 分配navigationController?.isNavigationBarHidden 对性能的影响不大。我的应用程序可以顺利完成许多这样的任务。一些影响您的 UI 的工作将启动或结束相机会话、初始化 GMSMapView 等。您能否使用您的 View Controller 类的完整代码更新帖子,以便其他人可以重现您的错误并找到适合您情况的更好的解决方案。
  • 这很奇怪,因为当我为 popViewController 使用自定义动画时,因此将默认动画设置为 false 一切都可以正常使用自定义动画。

标签: ios swift uinavigationcontroller uinavigationbar


【解决方案1】:

试试这个,我不确定,但它可能会工作

DispatchQueue.main.async {
            self.navigationController?.popViewController(animated: true)
        }

【讨论】:

  • 试过了,对我不起作用。不过还是谢谢。
【解决方案2】:

在您覆盖viewDidDisappear(_ animated: Bool) 时,您调用super.viewWillAppear(animated)。正如您现在可能已经知道的那样,您应该调用super.viewDidDisappear(animated)。您更正后的代码应为:

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    navigationController?.isNavigationBarHidden = false
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    相关资源
    最近更新 更多