UIBarButtonItem
在我的应用程序中,我有多个视图控制器,并且大多数都有一个带有直接“显示”segue 操作的右侧。
切换到另一个视图然后按下'< Back'
按钮后,原始按钮项仍然淡出,尽管在其他方面仍然可用。
这似乎只在 iOS 11.2 下发生。
我看不到任何可以这样做的设置,并且至少在发生这种情况的一种情况下,没有特定的 segue 展开或viewDidAppear
处理。我会发布一些代码,但 AFAICS 这一切都只是默认UINavigationBar
行为。
UIBarButtonItem
在我的应用程序中,我有多个视图控制器,并且大多数都有一个带有直接“显示”segue 操作的右侧。
切换到另一个视图然后按下'< Back'
按钮后,原始按钮项仍然淡出,尽管在其他方面仍然可用。
这似乎只在 iOS 11.2 下发生。
我看不到任何可以这样做的设置,并且至少在发生这种情况的一种情况下,没有特定的 segue 展开或viewDidAppear
处理。我会发布一些代码,但 AFAICS 这一切都只是默认UINavigationBar
行为。
这是 iOS 11.2 中的一个错误,发生的原因是UIBarButtonItem
导航后保持突出显示,并且在另一个视图控制器弹出后不会返回其正常状态。
为了避免这种行为,要么
使用 aUIBarButtonItem
和 aUIButton
作为自定义视图
禁用并重新启用 bar 按钮项viewWillDisappear(_:)
(尽管这会导致按钮立即出现,但使用matt 的解决方案来避免这种情况):
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
}
这似乎唤醒了没有视觉伪影的按钮。
另一种解决方法是在父导航控制器上实现修复 - 以便它的每个子视图控制器都得到修复,如下所示
注意:这需要将接收类设置为 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;
}
}
我是这样解决的:
override func viewWillDisappear(_ animated: Bool) {
navigationController?.navigationBar.tintAdjustmentMode = .normal
navigationController?.navigationBar.tintAdjustmentMode = .automatic
}
所以它会在另一个视图出现之前恢复颜色