iOS UINavigationBar button remains faded after segue back

前端 未结 4 1701
时光说笑
时光说笑 2020-11-27 20:43

In my app I have multiple view controllers, and most have a right-hand-side UIBarButtonItem with direct \"show\" segue actions attached.

Having segued t

相关标签:
4条回答
  • 2020-11-27 21:12

    Another work around is to implement the fix on the parent navigationController - so that each of its child viewController's gets the fix as follows

    NOTE: This requires the receiving class to be setup as the UINavigationController delegate

    Swift

    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;
        }
    }
    
    0 讨论(0)
  • 2020-11-27 21:14

    What I do is work around this bug, in the view controller's viewWillAppear, as follows:

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

    That seems to wake up the button without visual artifacts.

    0 讨论(0)
  • 2020-11-27 21:24

    I solved it like this:

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

    so it will restore the color before the other view appear

    0 讨论(0)
  • 2020-11-27 21:28

    This is a bug in iOS 11.2 and happens because the UIBarButtonItem stays highlighted after navigation and does not return to its normal state after the other view controller pops.

    To avoid this behavior, either

    1. use a UIBarButtonItem with a UIButton as a custom view

    2. disable and re-enable the bar button item in viewWillDisappear(_:) (although this causes the button to appear immediately, use matt's solution to avoid this):

      barButtonItem.isEnabled = false
      barButtonItem.isEnabled = true
      
    0 讨论(0)
提交回复
热议问题