Xcode 8导航栏返回动画问题

时间:2016-09-23 17:57:04

标签: ios xcode uinavigationbar ios10 xcode8

此问题发生在我切换到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;
        }
    }
}

enter image description here

enter image description here

1 个答案:

答案 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