iOS UINavigationBarbutton在继续之后保持淡入淡出状态

在我的应用程序中,我有多个视图控制器,并且大多数都有一个右边的UIBarButtonItemUIBarButtonItem有直接的“show”segue动作。

在查看另一个视图并按下'< Back'button后,原始button项仍然淡出,尽pipe仍然可用。

这似乎只发生在iOS 11.2下。

我看不到任何设置可以做到这一点,至less在这种情况发生的情况下,没有具体的segue展开或viewDidAppear处理。 我会张贴一些代码,但AFAICS这只是默认的UINavigationBar行为。

这是iOS 11.2中的一个错误,因为UIBarButtonItem在导航之后保持高亮状态,并且在另一个视图控制器popup之后不会恢复到正常状态。

为了避免这种行为,要么

  1. 使用UIBarButtonItemUIButton作为自定义视图

  2. 禁用并重新启用viewWillDisappear(_:)的栏button项目:

     barButtonItem.isEnabled = false
     barButtonItem.isEnabled = true
    

我所做的是在视图控制器的viewWillAppear解决这个问题,如下所示:

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.tintAdjustmentMode = .normal self.navigationController?.navigationBar.tintAdjustmentMode = .automatic } 

这似乎唤醒button没有视觉文物。

另一个解决方法是在父级导航控制器上实现修正 – 以便其子ViewController的每个获取修复程序如下

注意:这要求将接收类设置为UINavigationController委托

迅速

 func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { if #available(iOS 11.2, *) { navigationBar.tintAdjustmentMode = .normal navigationBar.tintAdjustmentMode = .automatic } } 

Objective-C的

 -(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if (@available(iOS 11.2, *)) { self.navigationBar.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; self.navigationBar.tintAdjustmentMode = UIViewTintAdjustmentModeAutomatic; } }