Ios 隐藏状态栏但不隐藏自定义窗口
我有一个自定义的UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有Ios 隐藏状态栏但不隐藏自定义窗口,ios,swift,uiwindow,ios7-statusbar,Ios,Swift,Uiwindow,Ios7 Statusbar,我有一个自定义的UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有 override var prefersStatusBarHidden: Bool { return true } 在我的UIWindow的rootViewController和主ViewController中。这会隐藏状态栏,但也会隐藏我的UIWindow。我的UIWindow的windowLevel是UIWindowLevelStatusBar+1,但我测试了其他windowLevel并
override var prefersStatusBarHidden: Bool {
return true
}
在我的UIWindow的rootViewController和主ViewController中。这会隐藏状态栏,但也会隐藏我的UIWindow。我的UIWindow的windowLevel
是UIWindowLevelStatusBar+1
,但我测试了其他windowLevel
并将其隐藏,而与级别无关
为自定义UIWindow设置不透明背景不是一个选项
如何隐藏状态栏而不隐藏自定义窗口 编辑:更好的解决方案
与前面/下面相同,但实际代码更短、更简单、更快速
在AppDelegate中,使用
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
myStatusBarWindow.isHidden = false
return true
}
当然,还可以隐藏系统状态栏。可以在build settings或info.plist中执行此操作,也可以在视图控制器中执行此操作,例如
override var prefersStatusBarHidden: Bool {
return true
}
好多了:)
旧解决方案 不幸的是,我找不到最好的答案,但我有一个解决办法: 首先展示你的窗户。只有在这之后,才应该隐藏状态栏。我不知道为什么会这样,但确实如此。您可以这样做:
// Class var
var statusBarHidden = false
// For example in viewDidLoad but only the order matters
override func viewDidLoad() {
myWindow.isHidden = false
statusBarHidden = true
setNeedsStatusBarAppearanceUpdate()
}
override var prefersStatusBarHidden: Bool {
return statusBarHidden
}
通过实验,我发现
prefersStatusBarHidden
在viewDidLoad
之前被选中。因此,我们需要告诉视图控制器在显示窗口后再次检查。再说一遍,我不知道为什么会这样,但确实如此。如果有人能解释这个现象(为什么这个顺序很重要),那将是这个解决方案的一个很好的补充。您可以选择只在特定的视图控制器中隐藏它吗?@MarcioRomeroPatrnogic,我可以在所有视图控制器上隐藏,也可以在特定视图控制器上隐藏:它没有matter@MarcioRomeroPatrnogic,可能是模拟器有问题吗?我现在无法在我的设备上进行测试。我想你只有在尝试时才会发现:(@MarcioRomeroPatrnogic,我刚刚尝试过,但它在设备上也不起作用:(有什么想法吗?当系统在代码级别读取preferssStatusBarHidden
时,是否可以看到系统做了什么?