2016-03-26 16 views
2

我试图让导航栏透明的一个视图控制器时,它显示。有用。然而,当我再次从父视图控制器重新进入视图控制器时,动画似乎并不正确。UINavigationBar立即消失,而PushViewcontroller动画为真

导航栏首次以动画方式保持并消失,直到第二个视图完全显示。但是,第二次和以后,导航栏完全消失,第二个视图以动画形式显示。

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

问题再现步骤:

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

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

任何帮助将不胜感激。

+0

我在想的另一个解决方案是在第二个视图中以自定义的方式完成这两个按钮。并且只将导航栏设置为透明。稍后再尝试。 – Zhao

回答

1

我发现了一个简单的解决方案,使动画看起来不错。由于导航栏背景颜色在我的应用中为白色,因此我将该窗口的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。

2

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

在您的ViewController中: 将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是我更新的代码项目,您可以下载。

+0

嗨Rashwan,谢谢你的回答。我认为不做动画是我们的一个选择。不过,我们真的很喜欢动画。我之前没有动画测试过,它在应用中看起来不太好。所以动画对我们来说是必须的。再次感谢您的帮助。 – Zhao