使用动画更改状态栏样式

时间:2017-02-24 16:47:15

标签: ios objective-c swift statusbar uistatusbar

由于IOS9已弃用UIApplication.shared.setStatusBarStyle(.default, animated: true),因此可以在push上使用动画更改状态栏样式吗?我在文档中找不到任何描述。

3 个答案:

答案 0 :(得分:9)

现在它是一个必须覆盖的变量:

override var preferredStatusBarStyle: UIStatusBarStyle
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation

根据您更新状态栏的时间,您可能还需要致电setNeedsStatusBarAppearanceUpdate()

答案 1 :(得分:3)

如果要设置状态栏样式,应用程序级别,请在UIViewControllerBasedStatusBarAppearance文件中将NO设置为.plist

如果您要在视图控制器级别设置状态栏样式,请按照以下步骤操作:

  1. 如果您只需要在UIViewController级别设置状态栏样式,请在UIViewControllerBasedStatusBarAppearance文件中将YES设置为.plist
  2. 在viewDidLoad添加功能 - setNeedsStatusBarAppearanceUpdate

  3. 覆盖视图控制器中的preferredStatusBarStyle。

  4. -

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    

    根据状态栏样式设置级别设置.plist的值。 enter image description here

答案 2 :(得分:0)

要解决动画问题的方法是使我在.lightContent.default之间平滑过渡,那就是每次更改动画时都使用类似于下面的内容。

UIView.animate(withDuration: 0.2) {
    self.setNeedsStatusBarAppearanceUpdate()
}

将其放置在VC中,以使状态栏具有动画效果,您将获得一个流畅的动画。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return lightStatusBar ? .lightContent : .default
}

上面是我根据自己所处的条件更改内容的摘要。

相关问题