使用动画更改状态栏样式

5

自从IOS9以来,UIApplication.shared.setStatusBarStyle(.default, animated: true)已经被弃用,那么在push时改变状态栏样式是否有动画效果呢?我在文档中找不到任何描述。


UIApplication.shared.statusBarStyle = .lightContent 你用过这个吗? - Lalit kumar
这不会改变带有动画的进度条。 - Danny
3个回答

10

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

override var preferredStatusBarStyle: UIStatusBarStyle
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation

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


它并非从UIViewController中被调用。 - Danny
你在哪里尝试设置状态栏样式? - Naveed J.
in viewWillAppear - Danny
1
你能否更新你的问题并附上代码,这样我们可以更好地理解吗? - Naveed J.
1
问题在于我之前将“View controller-based status bar appearance”设置为NO。 - Danny

3

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

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

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

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

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

根据状态栏样式设置级别,设置.plist的值。 在这里输入图片描述


它并非从UIViewController中被调用。 - Danny

1
为了解决动画部分,我让它在.lightContent.default之间平滑过渡,每次更改时使用类似以下的内容。
UIView.animate(withDuration: 0.2) {
    self.setNeedsStatusBarAppearanceUpdate()
}

将其放置在您想要状态栏动画的VC中,您将获得一个漂亮的平滑动画。
override var preferredStatusBarStyle: UIStatusBarStyle {
    return lightStatusBar ? .lightContent : .default
}

上面是我根据一个条件更改内容的一小段代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接