此问题发生在我切换到Xcode 8之后。 当我按下后退按钮时导航栏出现前一个颜色(黑色),然后在2秒后变为正常。存在GUI更新延迟问题。
我使用此代码恢复上一个导航栏:
- (void)restorePreviousNavBarAppearance:(BOOL)animated {
if (_didSavePreviousStateOfNavBar) {
[self.navigationController setNavigationBarHidden:_previousNavBarHidden animated:animated];
UINavigationBar *navBar = self.navigationController.navigationBar;
navBar.tintColor = _previousNavBarTintColor;
navBar.translucent = _previousNavBarTranslucent;
if ([UINavigationBar instancesRespondToSelector:@selector(barTintColor)]) {
navBar.barTintColor = _previousNavBarBarTintColor;
}
navBar.barStyle = _previousNavBarStyle;
if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
[navBar setBackgroundImage:_previousNavigationBarBackgroundImageDefault forBarMetrics:UIBarMetricsDefault];
[navBar setBackgroundImage:_previousNavigationBarBackgroundImageLandscapePhone forBarMetrics:UIBarMetricsLandscapePhone];
}
// Restore back button if we need to
if (_previousViewControllerBackButton) {
UIViewController *previousViewController = [self.navigationController topViewController]; // We've disappeared so previous is now top
previousViewController.navigationItem.backBarButtonItem = _previousViewControllerBackButton;
_previousViewControllerBackButton = nil;
}
}
}
答案 0 :(得分:0)
在iOS 10中,UIKit已经更新并统一了后台管理 UINavigationBar,UITabBar和UIToolbar。特别是改变了 这些视图的背景属性(例如背景或阴影 图像,或设置栏样式)可以启动布局传递 栏来解决新的背景外观。特别是这个 意味着尝试更改这些条的背景外观 在layoutSubviews中, - [UIView updateConstraints], viewWillLayoutSubviews,viewDidLayoutSubviews,updateViewConstraints, 或者可能导致响应布局而调用的任何其他方法 布局循环。
在某些情况下,您可以通过确保您来打破这些布局循环 在对象(例如UIImage或。)时始终使用相同的对象实例 UIColor)是必需的。但总的来说,你应该避免这样做。
因为现在所有外观参数都已解决,所以 可能是您的酒吧外观发生变化的一些情况。一般来说, 通过尽可能少地指定获得最佳结果 自定义你的酒吧。例如,如果您要指定 barTintColor值并为其指定一个空的UIImage对象 backgroundImage属性(就像调用[UIImage new]时的情况一样, 例如,那么你应该通过仅指定来获得更好的结果 barTintColor。您在iOS 10中为解决这些问题所做的任何更改 也应该在iOS 9中正常工作 - 如果不是这样的话,请 使用示例项目报告错误,并显示指示内容的屏幕截图 酒吧应该看起来像。
iOS10发布说明:iOS 10.0 Release Note