我试图修改状态栏的外观(使文本白色/将样式设置为"亮").我设法通过将其添加到我的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)
但是,当我去更改状态栏文本的样式时,即使在常规>部署信息>状态栏样式(将其更改为"Light")下更改此项也不起作用.
我还尝试通过Info.plist修改状态栏,但没有"查看基于控制器的状态栏外观"的字段(请参阅第二张图像).此外,状态栏样式选项下没有"浅色"样式选项(见下图):
状态栏样式选项:
没有视图控制器状态栏字段:
您错过的步骤是Info.plist.
打开应用程序的info.plist文件,将UIViewControllerBasedStatusBarAppearance设置为NO(如下所示).
注意:如果尚未出现此密钥,则可以添加此密钥:
1)将鼠标悬停在现有条目上以显示添加/删除图标:
2)单击加号图标以添加新的键/值对:
3)粘贴UIViewControllerBasedStatusBarAppearance
到关键字段并将其值设置为NO
.注意,View controller-based status...
当取消选择时,密钥将更改为,但它是相同的:
在应用程序的每个UIViewController中,您应该覆盖preferredStatusBarStyle
属性:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
并最终致电:
.setNeedsStatusBarAppearanceUpdate()
如果这个statusBar样式遍及你的所有应用程序,那么你应该创建一个BaseViewController
实现它的类,并使所有视图控制器继承自BaseViewController.
迅捷3
如果在Info.plist中查看基于控制器的状态栏外观= YES
然后对所有NavigationController使用此扩展
extension UINavigationController { override open var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } }
如果没有UINavigationController,只有UIViewController,那么使用下面的代码:
extension UIViewController { override open var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } }
目标c
创建类别类
对于UIViewController
在UIViewController + StatusBarStyle.h中
@interface UIViewController (StatusBarStyle) @end
在UIViewController + StatusBarStyle.m中
#import "UIViewController+StatusBarStyle.h" @implementation UIViewController (StatusBarStyle) -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end
对于UINavigationController
在UINavigationController + StatusBarStyle.h中
@interface UINavigationController (StatusBarStyle) @end
在UINavigationController + StatusBarStyle.m中
#import "UINavigationController+StatusBarStyle.h" @implementation UINavigationController (StatusBarStyle) -(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; } @end