【问题标题】:How to change statusBarStyle programmatically?如何以编程方式更改 statusBarStyle?
【发布时间】:2019-11-30 05:22:04
【问题描述】:

我正在为 iOS13 构建一个应用程序。我想根据用户可以选择的配色方案更改状态栏的文本颜色。似乎无法直接更改状态栏的文本颜色,所以我尝试更改 statusBarStyle。

首先我尝试:

var myStatusBarStyle = UIStatusBarStyle.default { didSet { setNeedsStatusBarAppearanceUpdate() } }
override var preferredStatusBarStyle : UIStatusBarStyle { return myStatusBarStyle; }

但它不起作用。

那我试试:

UIApplication.shared.statusBarStyle = myStatusBarStyle;

它确实完成了工作!但 Xcode 给出警告:“‘statusBarStyle’在 iOS 13.0 中已弃用:使用已安装的窗口场景的 statusBarManager 属性。”

所以,在 sceneWillEnterForeground(_ scene: UIScene) 我尝试:

guard let ws = (scene as? UIWindowScene) else { return }
if let t = ws.statusBarManager { print(t.statusBarStyle) }

很遗憾,t.statusBarStyle 是只读的。

现在,我该怎么办? ps:我在 Main.storyboard 中没有 Navigation Bar 或 Tab Bar。

【问题讨论】:

  • 你覆盖preferredStatusBarStyle的视图控制器是否是另一个视图控制器的子视图控制器?如果是这样,那么您需要在 parent 视图控制器中覆盖preferredStatusBarStyle(或者更确切地说,是“根”中的那个——没有父视图的那个)。
  • 我只有一个 ViewController。 (并且我可以通过以下语句更改状态栏的背景颜色:self.view.backgroundColor=myColor;)
  • 在您的 info.plist 中,您是否将 View controller-based status bar appearance 设置为 YES
  • 是的,我已经设置为YES了。

标签: ios swift


【解决方案1】:
  • 在 iOS 13 中,我们不允许这样做,但总是有转义根.. 我用过
    self.navigationController?.navigationBar.barStyle = .black

使状态栏变黑并且有效

您可以根据需要使用各种选项代替黑色(.default、.blackTranslucent、.blackOpaque)代替 .black

【讨论】:

  • 问题是关于状态栏的文字颜色,而不是导航栏的文字颜色。
  • 是的,谢谢...我的第二点无效,但self.navigationController?.navigationBar.barStyle = .black 使状态栏变黑并将状态栏文本变白,反之亦然.default
  • 提问者说他​​们没有使用导航控制器。此外,如果他们不想要导航控制器怎么办?或者如果他们这样做了,如果他们不想改变导航栏背景的颜色怎么办?正确的做法是在最父视图控制器中覆盖preferredStatusBarStyle,并在其上调用setNeedsStatusBarAppearanceUpdate
  • @TylerTheCompiler,如果我想根据用户的选择改变状态栏文本的颜色怎么办?黑或白,不是固定的。
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多