状态栏无法在iPhone X中设置动画

时间:2018-10-25 15:57:17

标签: ios swift statusbar

我正在使用带有XCode 10和iOS 11的iPhone应用程序。

从一个场景移动到另一个场景时,我试图让状态栏在屏幕外动起来。

在我的第一个视图控制器(TableViewController)中,我声明:

var isStatusBarHidden = false

然后添加以下内容:

override var prefersStatusBarHidden: Bool {
    return isStatusBarHidden
}

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    return .slide
}

,然后在prepare方法中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "resultSegue" {
        ...

        isStatusBarHidden = true
        UIView.animate(withDuration: 0.5, animations: {
            self.setNeedsStatusBarAppearanceUpdate()
        })
    }
}

在第二个视图控制器(ViewController)中,我

var isStatusBarHidden = true

override var prefersStatusBarHidden: Bool {
    return true
}

该动画在iPhone 8上运行良好。但是,在iPhone X上,即使状态栏确实出现并消失了,它也没有动画。

我该如何在iPhone X上播放动画?

1 个答案:

答案 0 :(得分:0)

只要我没有在UINavigationController中嵌入第一个视图控制器,我的代码就可以很好地工作。

如果您的第一个视图控制器位于UINavigationController中: 创建一个子类,例如CustomNavigationController:

class CustomNavigationController: UINavigationController {

    var isStatusBarHidden: Bool = false

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }

}

然后在第一个视图控制器中的prepare segue方法中:

if let navigationController = navigationController as? CustomNavigationController {
    navigationController.isStatusBarHidden = true
    UIView.animate(withDuration: 0.5, animations: {
        self.setNeedsStatusBarAppearanceUpdate()
    })
}

就像在第二个视图控制器中一样:

override var prefersStatusBarHidden: Bool {
    return true
}

然后在iPhone X上对我来说动画效果很好。