在XCode 8.2/Swift 3.0中更改状态栏样式(否"查看基于控制器的状态栏外观")

fol*_*urk 5 statusbar ios swift

我试图修改状态栏的外观(使文本白色/将样式设置为"亮").我设法通过将其添加到我的AppDelegate.swift文件来设置背景颜色:

let statWindow = UIApplication.shared.value(forKey:"statusBarWindow") as! UIView
let statusBar = statWindow.subviews[0] as UIView
statusBar.backgroundColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
Run Code Online (Sandbox Code Playgroud)

但是,当我去更改状态栏文本的样式时,即使在常规>部署信息>状态栏样式(将其更改为"Light")下更改此项也不起作用.

我还尝试通过Info.plist修改状态栏,但没有"查看基于控制器的状态栏外观"的字段(请参阅第二张图像).此外,状态栏样式选项下没有"浅色"样式选项(见下图):

状态栏样式选项: 截图

没有视图控制器状态栏字段: 截图

小智 10

您错过的步骤是Info.plist.

打开应用程序的info.plist文件,将UIViewControllerBasedStatusBarAppearance设置为NO(如下所示).

截图

注意:如果尚未出现此密钥,则可以添加此密钥:

1)将鼠标悬停在现有条目上以显示添加/删除图标:

在此输入图像描述

2)单击加号图标以添加新的键/值对:

在此输入图像描述

3)粘贴UIViewControllerBasedStatusBarAppearance到关键字段并将其值设置为NO.注意,View controller-based status...当取消选择时,密钥将更改为,但它是相同的:

在此输入图像描述 在此输入图像描述


Nic*_*uet 7

在应用程序的每个UIViewController中,您应该覆盖preferredStatusBarStyle属性:

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
Run Code Online (Sandbox Code Playgroud)

并最终致电:

<your controller>.setNeedsStatusBarAppearanceUpdate()
Run Code Online (Sandbox Code Playgroud)

如果这个statusBar样式遍及你的所有应用程序,那么你应该创建一个BaseViewController实现它的类,并使所有视图控制器继承自BaseViewController.


Dat*_*tel 7

迅捷3

如果在Info.plist中查看基于控制器的状态栏外观= YES

然后对所有NavigationController使用此扩展

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }
Run Code Online (Sandbox Code Playgroud)

如果没有UINavigationController,只有UIViewController,那么使用下面的代码:

    extension UIViewController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
         }
     }
Run Code Online (Sandbox Code Playgroud)

目标c

创建类别类

对于UIViewController

在UIViewController + StatusBarStyle.h中

 @interface UIViewController (StatusBarStyle)
 @end
Run Code Online (Sandbox Code Playgroud)

在UIViewController + StatusBarStyle.m中

 #import "UIViewController+StatusBarStyle.h"

 @implementation UIViewController (StatusBarStyle)

 -(UIStatusBarStyle)preferredStatusBarStyle {
  return UIStatusBarStyleLightContent;
 }

 @end 
Run Code Online (Sandbox Code Playgroud)

对于UINavigationController

在UINavigationController + StatusBarStyle.h中

 @interface UINavigationController (StatusBarStyle)
 @end
Run Code Online (Sandbox Code Playgroud)

在UINavigationController + StatusBarStyle.m中

 #import "UINavigationController+StatusBarStyle.h"

 @implementation UINavigationController (StatusBarStyle)

 -(UIStatusBarStyle)preferredStatusBarStyle {
  return UIStatusBarStyleLightContent;
 }

 @end  
Run Code Online (Sandbox Code Playgroud)