UINavigationBar 立即消失,而带动画的 pushViewcontroller 为真

UINavigationBar disappears immediately while pushViewcontroller with animated is true

我试图让一个视图控制器的导航栏在显示时透明。有用。但是,当我从父视图控制器再次重新进入视图控制器时,动画似乎不正确。

第一次导航栏以动画方式停留和消失,直到第二个视图完全显示。然而,第二次及以后,导航栏完全消失,第二个视图以动画形式显示。

我在这里创建了一个最小项目来说明问题:https://github.com/zwang/CVNavigationBarTest

问题重现步骤:

  1. 单击颜色视图控制器中的代码块之一
  2. 点击后退按钮
  3. 再次单击其中一个代码块。
  4. 看到问题

第一次单击颜色视图控制器中的一个颜色块时,过渡动画很好,符合预期。但是,当从第二个视图控制器返回后再次单击其中一个色块时,您会注意到导航栏区域立即变为黑色,然后开始显示第二个视图控制器的动画。您可以在模拟器中切换慢速动画以更清楚地看到问题。

如有任何帮助,我们将不胜感激。

您可以做的是在更换幻灯片时删除动画。我遇到了同样的问题,这就是我所做的,因为我没有找到更好的解决方案。

在你的 ViewController 中: 将 self.navigationController?.pushViewController(colorVC, animated: true) 设置为 animated false

你的颜色ViewController: 覆盖后退按钮以禁用后退按钮的动画。因此,在您的 viewDidLoad 中执行以下操作:

self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "New back button", style: UIBarButtonItemStyle.Bordered, target: self, action: "back:")
self.navigationItem.leftBarButtonItem = newBackButton

然后创建新的返回函数:

func back(sender: UIBarButtonItem) {
    // Go back to the previous ViewController without an animation
    self.navigationController?.popViewControllerAnimated(false)
}

并且 here 是您的项目,您可以下载我的更新代码。

我找到了一个使动画看起来不错的简单解决方案。我只是将 window 的 backgroundColor 更改为 white,因为我的应用程序中的导航栏背景颜色为白色。下面是我添加的代码。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    window?.backgroundColor = UIColor.whiteColor()

    return true
}

同样的解决方案也适用于类似情况下与问题相关的UITabBar。