【问题标题】:Status bar not animating in iPhone XiPhone X 中的状态栏没有动画
【发布时间】:2018-10-25 15:57:16
【问题描述】:

我正在开发一个带有 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 上?

【问题讨论】:

    标签: ios swift statusbar


    【解决方案1】:

    只要我没有在 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 上的动画效果很好。

    【讨论】:

    • 不幸的是,我无法让它工作。我应该将子类代码放在第一个视图控制器的底部吗?
    • 你使用导航控制器吗?子类代码是一个继承自 UINavigationController 的新类。如果您使用 UINavigationController,请确保将其设置为 CustomNavigationController(在故事板或代码中。取决于应用程序的构建方式)。如果您仍然有问题,那么有关您如何做事的更多信息可能会很有用。此外,您使用哪种类型的 segue 来呈现第二个视图控制器?
    • 终于让它工作了!我将 UINavigationController 设置为故事板中的自定义类。这就是我所缺少的。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2019-06-16
    相关资源
    最近更新 更多