更改NavigationItem提示时的奇怪动画

时间:2015-05-28 14:07:29

标签: ios uinavigationcontroller storyboard uikit uiviewanimation

我在故事板中添加了这些ViewControllers:

enter image description here

没有与自定义类相关联,一切都来自纯故事板。

Video on iPhone simulator on iOS7

仅在iOS7上使用AutoLayout时才会发生这种情况。

其他人见过这个吗?

  

Download sample project of problem

3 个答案:

答案 0 :(得分:4)

我认为当视图获得自动布局并将其大小设置为主屏幕大小时会出现此问题。在iOS 7导航推送动画来到视图大小设置之前,我们可以看到动画。不要担心它在iOS 8.0及更高版本中运行良好。对于iOS 7.0,您可以在viewDidLoad中指定视图大小,以便它可以在显示之前调整大小。

答案 1 :(得分:3)

编辑2:

正如评论中提到的那样,我无法重现您的示例项目的问题。但我注意到的一件事是,您的项目配置了iOS 8.3的部署目标。以下是修复该问题的步骤:

步骤1:在Xcode的Project Navigator中选择您的项目。 第2步:确保在项目编辑器的左栏中选择项目,而不是目标 第3步:选择Build Settings选项卡 步骤4:根据您正在测试的操作系统,将 iOS部署目标修改为 iOS 7.1 iOS 7.0 。 第5步:构建并运行。

希望这会帮助你。

修改

步骤1。选择带有标签14的UIViewController,然后在Xcode右侧窗格的第三个标签页中输入一个故事板ID,例如vc14。

第二步。选择标有12的UIViewController,然后在同一标签中输入自定义类,例如ViewController

步骤3。从按钮中移除触发器segue操作,并将其替换为@IBAction

中的ViewController

步骤4。将此代码添加到@IBAction中的ViewController

@IBAction func push(sender: AnyObject) {
    var vc14 = self.storyboard?.instantiateViewControllerWithIdentifier("vc14") as! UIViewController
    vc14.view.layoutIfNeeded()
    self.navigationController?.pushViewController(vc14, animated: true)
}

<强>解释

奇怪的动画正在发生,因为在segue推动UIViewController中的UINavigationController之前,布局从未发生过。 iOS 7无法通过在进入动画块之前手动调用layoutIfNeeded来适当地保护这种情况,并且当布局最终发生时,它会触发隐式动画。在我给你的代码示例中,我在推送堆栈上的ViewController之前手动触发布局,以避免出现此问题。

答案 2 :(得分:0)

我想你按⌘T。所以Slow动画开始了。检查您使用的所有模拟器。

调试 - &gt;慢动画

我附上图片检查它。 See Image