【问题标题】:Change status bar style with animation用动画改变状态栏样式
【发布时间】:2017-07-15 14:27:49
【问题描述】:

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

【问题讨论】:

  • UIApplication.shared.statusBarStyle = .lightContent 你用过这个吗
  • 这不会用动画改变栏

标签: ios objective-c swift statusbar uistatusbar


【解决方案1】:

它现在是一个你必须重写的变量:

override var preferredStatusBarStyle: UIStatusBarStyle
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation

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

【讨论】:

  • 不是从 UIViewController 调用的
  • 你想在哪里设置状态栏样式?
  • in viewWillAppear
  • 您能否用代码更新您的问题,以便我们更好地理解?
  • 问题是我之前将基于视图控制器的状态栏外观设置为 NO
【解决方案2】:

如果您想设置状态栏样式、应用程序级别,请在您的.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 的值。

【讨论】:

  • 不是从 UIViewController 调用的
【解决方案3】:

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

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

将您希望状态栏设置为动画的 VC 中放置,您将获得一个非常流畅的动画。

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

以上是我根据自己的条件更改内容的 sn-p。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多