【问题标题】:iOS set statusbar white, and hide in another ViewControlleriOS设置状态栏为白色,并隐藏在另一个ViewController中
【发布时间】:2016-11-24 16:18:16
【问题描述】:

我的主要初始 ViewController 需要一个白色状态栏,但也可以将其隐藏在另一个 ViewController 中。我可以做一个或另一个,但不能同时做。有什么建议吗?

我通过设置将其设置为白色

查看控制器状态栏外观键为NO Info.plist

override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
}

并隐藏它(在另一个以模态方式呈现的 ViewController 上)我会这样做,

override func prefersStatusBarHidden() -> Bool {
    return statusBarHidden
}

但它不会隐藏,除非我删除了之前添加到 Info.plist 中的键,但如果我删除了该键,状态栏就会变回黑色。


EDIT-MY 解决方案: 视图控制器类在我的情况下不起作用,因为我将主视图控制器嵌入到导航控制器中,我的解决方法是覆盖相同的方法,但针对导航控制器而不是相关视图控制器。

extension UINavigationController {
    public override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }
}

【问题讨论】:

  • 您正在使用哪个版本的 Xcode ?我的意思是 swift3 或更早的版本?
  • swift 2.2, xcode 7.3...还需要在xcode7.3中停留一段时间。
  • 不要为此使用 Info.plist。使用提供的视图控制器方法。
  • 不再在电脑上(从手机回复)但是,如果我从 .plist 中删除密钥,那么状态栏将保持黑色,我需要它为白色。
  • 我发现了我的问题,视图控制器类不起作用,因为我将 VC 嵌入到 NavigationController 中。

标签: ios swift xcode


【解决方案1】:

如果你添加

在 Info.plist 中查看基于控制器的状态栏外观键为 NO

您应该使用[UIApplication setStatusBarHidden:withAnimation:][UIApplication setStatusBarStyle:animated:] 来更改状态栏的外观。你的方法不会被调用

正如苹果document所说:

UIViewControllerBasedStatusBarAppearance (Boolean - iOS) 指定状态栏外观是否基于当前位于状态栏下方的视图控制器首选的样式。当此键不存在或其值设置为 YES 时,视图控制器确定状态栏样式。当键设置为 NO 时,视图控制器(或应用程序)必须每个都使用 UIApplication 对象显式设置状态栏样式。

UIViewControllerBasedStatusBarAppearance 密钥与View controller-based status bar appearance 密钥相同。

如果您不添加密钥,您的方法应该可以工作。尝试在这两个视图控制器中添加这两种方法,并添加一些断点以查看它们被错误地调用或覆盖。

Swift 3.0 Xcode 8.2 中的代码适用于我:

override open var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent
}    


override open var prefersStatusBarHidden: Bool {
   return true
}

【讨论】:

  • 谢谢,现在无法尝试,今晚可能会尝试(另外,对您的答案投反对票的不是我)。问题是,如果我从 plist 中删除密钥,状态栏将保持黑色。我也在 xcode 7.3 上运行,并且 [UIApplication setStatusBarHidden:withAnimation:] 已弃用。
  • 谢谢,就像我说的那样,我不是对你的答案投反对票的人。我也发现了我的问题,视图控制器类不起作用,因为我将 VC 嵌入到 NavigationController 中。
猜你喜欢
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 1970-01-01
相关资源
最近更新 更多