【问题标题】:Set the status bar to black colour将状态栏设置为黑色
【发布时间】:2016-03-24 18:29:03
【问题描述】:

我想将status bar(顶部显示时钟和电池的小条)的颜色设置为黑色背景和白色文本。我该怎么做?

到目前为止我的方法:

我在info.plist中添加了以下内容

View controller-based status bar appearance --> NO

viewController

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleDefault;
}

但是,样式不会改变。如何让状态栏变黑?

【问题讨论】:

  • 为什么要将View controller-based status bar appearance设置为NO?考虑到您正在使用视图控制器来提供样式,您确定不想要 YES 吗?

标签: ios objective-c uistatusbar


【解决方案1】:

对于 Xcode 8 / iOS 10 / Swift 3:

通过在状态栏下添加彩色 UIView 来临时更改一个视图上的状态栏背景颜色。我把这些行放在viewWillAppear() 中。我的色调是白色,透明度为 45%,但您可以输入任何不透明或透明的 UIColor 值。

let statusView = UIView(frame: CGRect(x: 0, y: 0, width:     self.view.bounds.width, height: 20))
statusView.backgroundColor = UIColor.white.withAlphaComponent(0.45)
 self.view.addSubview(statusView)

如果视图上有导航控制器,您可以将状态视图添加到导航控制器,而不是视图。

你也可以传入 UIScreen.main.bounds.size.width 作为模拟状态栏背景视图的宽度。不要对宽度进行硬编码,否则它不会正确适合所有设备。

或者,您还可以使用此代码更改整个应用中的状态栏背景。请注意,即使放置在viewWillAppear(),而不是viewDidLoad(),当您向前/向后导航时,其他视图仍将采用更改后的状态栏。

let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
let statusBar = statWindow.subviews[0] as UIView
statusBar.backgroundColor = UIColor.white.withAlphaComponent(0.45)

【讨论】:

    【解决方案2】:

    您可以通过调用使文本变白:

    UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
    

    状态栏有透明背景。没有办法改变这一点。您可以将视图固定在其下方以充当背景。

    【讨论】:

    • 如何让导航栏从状态栏开始?因此,如果我的导航栏是黑色的,那么状态也会看起来像黑色。如何做到这一点?
    • 使用与导航控制器关联的导航栏。例如,在您的故事板中,单击您想要在其上设置导航栏的视图控制器。然后点击编辑器->嵌入->导航控制器。然后点击导航控制器场景,点击导航栏,然后将检查器中的 Bar Tint 更改为黑色。
    • self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    • 如何降低导航栏的高度?
    【解决方案3】:

    您需要在 Xcode-8.1 和 iOS 10 中执行 3 个步骤:

    所以最后我们可以得到想要的结果:

    【讨论】:

    • @Natalia Chodelski :你认为你为什么投反对票还是无缘无故投反对票。通过downVoting,您只是在展示不成熟的编码。您可以编辑我的答案并显示更新后的屏幕截图。显示它的不同之处。这将反映真正的团队精神:) 谢谢。
    • 我对你的回答投了反对票有几个原因:你发布了一张图片,而不是代码,我觉得它对遇到它的程序员不太有用,因为它不能被复制。还有准确性 - .plist 屏幕截图中的第一行“基于视图控制器的状态栏外观 = NO”在这里没有做任何事情,因为您实际上是在状态栏下方的主视图顶部添加了一个彩色子视图,而不是控制状态栏主题通过它的 API 方法。
    • 这一行将停止使用普通状态栏 api 方法工作的主题效果,因为它实际上是在告诉应用程序全局状态栏主题应该控制所有状态栏外观,但是你通过代码绕过它在下面添加一个子视图。 .plist 屏幕截图的第三行也没有做任何事情UIStatusbarStyle.lightContent 应该使状态栏文本变为白色,而是显示背景视图的相同灰色。所以这条线也毫无意义。
    • 最后,您创建的模拟状态栏背景视图不应硬编码为宽度,您应该使用视图的宽度或UIScreen.main.bounds.size.width 传递宽度,以便它适合所有设备。哦,如果您没有导航控制器,您可以将彩色视图添加到视图中,这是一个非常常见的用例。
    【解决方案4】:

    简单的解决方案:

    转到您的主情节提要(应用启动时加载的情节提要,在启动画面完成后),并将顶级UIView 的背景颜色更改为黑色。

    如果您需要屏幕的其余部分具有另一个彩色背景,只需创建另一个 UIView 作为顶级视图的子视图,将其框架设置为从顶部布局指南下方开始,并设置其颜色任何你需要的颜色。

    您仍然需要设置其他答案中提到的 plist 标志。

    【讨论】:

      【解决方案5】:

      转到 Plist 文件

      a) Set the value "View controller-based status bar appearance" to NO
      b) Set the value "Status bar style" to UIStatusBarStyleLightContent 
      
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
          // Override point for customization after application launch.
      #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(version)  ([[[UIDevice currentDevice] systemVersion] compare:version options:NSNumericSearch] != NSOrderedAscending)
      
          if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
          {
              UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,[UIScreen mainScreen].bounds.size.width, 20)];
              view.backgroundColor=[UIColor blackColor];
              [self.window.rootViewController.view addSubview:view];
          }
          return YES;
      }
      

      它为我修复了状态栏颜色。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多