【问题标题】:iOS - Navigation bar color transition when pressing back buttoniOS - 按下后退按钮时导航栏颜色过渡
【发布时间】:2017-03-27 23:39:25
【问题描述】:

我试图在导航堆栈上推送视图控制器时更改导航栏的颜色,在 navigationController(_:willShow:animated:) 期间使用 barTintColor。

代码如下:

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    if viewController is ViewerViewController {
      navigationBar.barTintColor = UIColor(custom: .white)
      navigationBar.tintColor = UIColor(custom: .black)
    } else if viewController is FeedViewController {
      navigationBar.barTintColor = UIColor(custom: .blue)
      navigationBar.tintColor = UIColor(custom: .white)
    }
  }

当我推动视图控制器和使用向后滑动手势时,一切都很好(颜色过渡在两种方式中都很平滑)。

但是当我按下后退按钮时,一开始颜色没有改变,导航过渡完成,然后颜色改变,没有动画。 p>

是否有人已经遇到/解决了这个问题?任何线索将不胜感激。

【问题讨论】:

  • 如果您编写代码,那么我们很容易确定它发生的原因

标签: ios colors uinavigationbar transition


【解决方案1】:

我遇到了完全相同的问题,因此将“后退”按钮替换为自定义左栏按钮,并调用:

navigationController?.popViewController(animated: true)

编辑:

设置 leftBarButton 导致滑动手势丢失,所以我需要另一个技巧:

navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(pop))
navigationController?.interactivePopGestureRecognizer?.delegate = self

【讨论】:

  • 这很遗憾失去了导航控制器的 swipeToGoBack 手势 :(
  • @OliverAtkinson 添加 interactivePopGestureRecognizer 代表解决了这个问题
  • 谢谢,该委托手势的实现是什么样的?
  • @Oliver Atkinson 它可以是一个空的实现
【解决方案2】:

我最终使用了KMNavigationBarTransition library,它运行良好,并且不需要一行代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 2021-11-16
    • 2015-04-28
    • 1970-01-01
    • 2011-12-17
    • 2015-05-02
    相关资源
    最近更新 更多