【发布时间】:2018-01-09 09:30:47
【问题描述】:
应用以黄色图片为背景,状态栏设置为隐藏状态,在iPhone X以外的其他设备上运行良好。
状态栏保持白色文本颜色。
我尝试添加以下代码,仍然失败:
override var preferredStatusBarStyle: UIStatusBarStyle{
return .default
}
还有什么建议吗?
谢谢。
【问题讨论】:
应用以黄色图片为背景,状态栏设置为隐藏状态,在iPhone X以外的其他设备上运行良好。
状态栏保持白色文本颜色。
我尝试添加以下代码,仍然失败:
override var preferredStatusBarStyle: UIStatusBarStyle{
return .default
}
还有什么建议吗?
谢谢。
【问题讨论】:
方法一:
您必须将此值添加到 plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。
然后在AppDelegate中添加这个
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
if #available(iOS 11.0, *) {
if (window?.safeAreaInsets.top)! > CGFloat(0.0) || window?.safeAreaInsets != .zero {
print("iPhone X")
application.isStatusBarHidden = true
//or UIApplication.shared.isStatusBarHidden = true
}
else {
print("Not iPhone X")
application.isStatusBarHidden = true
}
}
return true
}
方法二: “查看基于控制器的状态栏外观”并将其设置为“YES”。 这是默认设置。
在 iOS11+ 中,setStatusBarHidden 和 isStatusBarHidden 已弃用,
[prefersStatusBarHidden][2] iOS7+ 可用,我们可以在ViewController as- 上进行状态栏可见性设置-
struct StatusBarInfo {
static var isToHiddenStatus = false
}
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 11.0, *) {
if (window?.safeAreaInsets.top)! > CGFloat(0.0) || window?.safeAreaInsets != .zero {
print("iPhone X")
StatusBarInfo.isToHiddenStatus = true
}
else {
StatusBarInfo.isToHiddenStatus = true
print("Not iPhone X")
}
}
return true
}
在 ViewController.Swift 中
override var prefersStatusBarHidden: Bool {
return StatusBarInfo.isToHiddenStatus
}
【讨论】:
UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.default, animated: true) 这是黑色状态栏
UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightcontent, animated: true) 这是白色状态栏