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

Posted

技术标签:

【中文标题】UINavigationBar 立即消失,而带有动画的 pushViewcontroller 为真【英文标题】:UINavigationBar disappears immediately while pushViewcontroller with animated is true 【发布时间】:2016-03-26 07:38:29 【问题描述】:

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

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

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

问题重现步骤:

    单击颜色视图控制器中的代码块之一 点击返回按钮 再次单击其中一个代码块。 查看问题

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

任何帮助将不胜感激。

【问题讨论】:

我正在考虑的另一个解决方案是以自定义方式完成第二个视图中的两个按钮。并且只设置导航栏透明。稍后会尝试。 【参考方案1】:

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

在您的视图控制器中: 将self.navigationController?.pushViewController(colorVC, animated: true) 设置为animated false

在您的 ColorViewController 中: 覆盖后退按钮以禁用后退按钮的动画。因此,在您的 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 是您的项目,您可以下载我的更新代码。

【讨论】:

嗨拉什万,感谢您的回答。我认为不做动画是我们的一种选择。但是,我们真的很喜欢动画。我之前在没有动画的情况下进行了测试,它在应用程序中看起来不太好。所以动画对我们来说是必须的。再次感谢您的帮助。【参考方案2】:

我找到了一个使动画看起来不错的简单解决方案。我只是将窗口的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。

【讨论】:

以上是关于UINavigationBar 立即消失,而带有动画的 pushViewcontroller 为真的主要内容,如果未能解决你的问题,请参考以下文章

旋转更改后 UINavigationBar 消失

如何确保菜单关闭时立即消失,而不是部分消失?

UINavigationBar 不立即更新颜色

从 UIActivityViewController 关闭邮件后 UINavigationBar 消失

UINavigationBar 与 UISearchDisplayController 和 UISearchBar 一起消失

用户使用 Firebase 注销后,根控制器 UINavigationBar 消失