用动画改变状态栏样式
Posted
技术标签:
【中文标题】用动画改变状态栏样式【英文标题】:Change status bar style with animation 【发布时间】:2017-07-15 14:27:49 【问题描述】:由于UIApplication.shared.setStatusBarStyle(.default, animated: true)
已被ios9 弃用,是否可以在push
上使用动画 更改状态栏样式?我在文档中找不到任何描述。
【问题讨论】:
UIApplication.shared.statusBarStyle = .lightContent 你用过这个吗 这不会用动画改变栏 【参考方案1】:它现在是一个你必须重写的变量:
override var preferredStatusBarStyle: UIStatusBarStyle
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation
根据您更新状态栏的时间,您可能还需要致电setNeedsStatusBarAppearanceUpdate()
【讨论】:
不是从 UIViewController 调用的 你想在哪里设置状态栏样式? in viewWillAppear 您能否用代码更新您的问题,以便我们更好地理解? 问题是我之前将基于视图控制器的状态栏外观设置为 NO【参考方案2】:如果您想设置状态栏样式、应用程序级别,请在您的.plist
文件中将UIViewControllerBasedStatusBarAppearance
设置为NO
。
如果您想设置状态栏样式,请在视图控制器级别执行以下步骤:
-
如果您只需要在 UIViewController 级别设置状态栏样式,请在
.plist
文件中将 UIViewControllerBasedStatusBarAppearance
设置为 YES
。
在viewDidLoad添加函数-setNeedsStatusBarAppearanceUpdate
在您的视图控制器中覆盖 preferredStatusBarStyle。
-
override func viewDidLoad()
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
override var preferredStatusBarStyle: UIStatusBarStyle
return .lightContent
根据状态栏样式设置级别设置 .plist 的值。
【讨论】:
不是从 UIViewController 调用的【参考方案3】:为了处理动画部分,我让它在 .lightContent
和 .default
之间平滑过渡的方式是在每次更改时使用类似于下面的内容。
UIView.animate(withDuration: 0.2)
self.setNeedsStatusBarAppearanceUpdate()
将您希望状态栏设置为动画的 VC 中放置,您将获得一个非常流畅的动画。
override var preferredStatusBarStyle: UIStatusBarStyle
return lightStatusBar ? .lightContent : .default
以上是我根据自己的条件更改内容的 sn-p。
【讨论】:
以上是关于用动画改变状态栏样式的主要内容,如果未能解决你的问题,请参考以下文章
状态栏样式不会因单个视图而改变 - Swift 2/iOS9