使用动画更改状态栏样式

Change status bar style with animation

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

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

override var preferredStatusBarStyle: UIStatusBarStyle
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation

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

如果您想设置状态栏样式,应用程序级别然后在您的.plist文件中将UIViewControllerBasedStatusBarAppearance设置为NO

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

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

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

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

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

为了按照我在 .lightContent.default 之间平滑过渡的方式处理动画部分,每次更改时都使用类似于下面的内容。

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

在您的 VC 中放置您希望状态栏具有动画效果的内容,您将获得一个非常流畅的动画效果。

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

以上是我根据自己的条件更改内容的片段。