在 iPhone X 中状态栏没有动画

Status bar not animating in iPhone X

我正在使用 XCode 10 和 iOS 11 开发 iPhone 应用程序。

当从一个场景移动到另一个场景时,我正在尝试让状态栏在屏幕外显示动画。

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

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 上?

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

如果您的第一个视图控制器位于 UINavigationController 中: 做一个子类,f.ex CustomNavigationController:

class CustomNavigationController: UINavigationController {

    var isStatusBarHidden: Bool = false

    override var prefersStatusBarHidden: Bool {
        return isStatusBarHidden
    }

    override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }

}

然后在第一个视图控制器的prepare for 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 上为我制作了很好的动画。