禁用 segue 动画

Disabling segue animation

我想在故事板中显示(例如推送)转场,以连接我的视图控制器和导航控制器。然后视图控制器上的导航栏将正确显示。 例如:使用 show detail 或 present modaly,导航栏会消失

但我不想要 segue 动画。 Xcode 发出如下警告:"Disabling segue animation is not available prior to iOS 9.0"

我想要 iOS 7.0 或 8.0

的部署目标

我该如何解决这个问题?

提前致谢。

您可以在执行 segue 之前禁用动画,然后再次启用它。

UIView.setAnimationsEnabled(false)
self.performSegueWithIdentifier("next", sender: nil)
UIView.setAnimationsEnabled(true)

这将在没有动画的情况下执行转场。

我使用此线程中的 Swift 答案进行了自定义转场:
Push segue in xcode with no animation

所以:

class ShowNoAnimationSegue: UIStoryboardSegue {

    override func perform() {
        let source = sourceViewController as UIViewController
        if let navigation = source.navigationController {
            navigation.pushViewController(destinationViewController as UIViewController, animated: false)
        }
    }
}

并且在 Xcode 中,在自定义 Segues 的属性检查器中,我选中了 'Animates' 框(是)。现在警告消失了,所以这就是我回答自己问题的原因。

我还不确定这是否是一个持久的解决方案。

点击 Main.Storyboard 中的 segue 箭头,然后:

查看 Animates

如果你想在代码中切换动画状态,你可以在故事板中复制你的segue,使用不同的标识符,相同的起点和终点。然后制作一个主题动画,另一个不动画。然后,使用所需的标识符执行 performSegue。

class MyNavigationController : UINavigationController {

    var firstTransitionAnimated : Bool = true // or false, based on initialization


    override func viewDidLoad() {
        super.viewDidLoad()
        var properSegue = firstTransitionAnimated ? "animated_segue" : "not_animated_segue"
        self.performSegue(withIdentifier: properSegue, sender: self)
    }
}