隐藏状态栏但不隐藏自定义 UIWindow
Hide status bar but not custom UIWindow
我有一个自定义的 UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有
override var prefersStatusBarHidden: Bool {
return true
}
在我的 UIWindow 的根 ViewController 和主 ViewController 中。这隐藏了状态栏,但它也隐藏了我的 UIWindow。我的UIWindow的windowLevel
是UIWindowLevelStatusBar + 1
,但是我测试了其他的windowLevel
,不管级别都是隐藏的。
无法为我的自定义 UIWindow 设置不透明背景。
如何隐藏状态栏而不是我的自定义 UIWindow?
编辑:更好的解决方案
与before/below同样适用,但实际代码更短、更简单、更敏捷。
在您的 AppDelegate 中,
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
myStatusBarWindow.isHidden = false
return true
}
当然还有隐藏系统状态栏。在构建设置或 info.plist 中执行此操作,或者在您的视图控制器中执行此操作,比如
override var prefersStatusBarHidden: Bool {
return true
}
好多了:)
旧解
不幸的是,我找不到可能是最好的答案,但我有一个解决方法:
首先展示你的window。只有在那之后你才应该隐藏状态栏。我不确定 为什么 这行得通,但确实如此。你可以这样做:
// 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
之前被选中。因此,我们需要告诉视图控制器在 window 显示后再次检查。同样,我不知道为什么会这样,但确实如此。如果有人能解释这个现象(为什么这个顺序很重要),那将是对这个解决方案的一个很好的补充。
我有一个自定义的 UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有
override var prefersStatusBarHidden: Bool {
return true
}
在我的 UIWindow 的根 ViewController 和主 ViewController 中。这隐藏了状态栏,但它也隐藏了我的 UIWindow。我的UIWindow的windowLevel
是UIWindowLevelStatusBar + 1
,但是我测试了其他的windowLevel
,不管级别都是隐藏的。
无法为我的自定义 UIWindow 设置不透明背景。
如何隐藏状态栏而不是我的自定义 UIWindow?
编辑:更好的解决方案
与before/below同样适用,但实际代码更短、更简单、更敏捷。
在您的 AppDelegate 中,
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
myStatusBarWindow.isHidden = false
return true
}
当然还有隐藏系统状态栏。在构建设置或 info.plist 中执行此操作,或者在您的视图控制器中执行此操作,比如
override var prefersStatusBarHidden: Bool {
return true
}
好多了:)
旧解
不幸的是,我找不到可能是最好的答案,但我有一个解决方法:
首先展示你的window。只有在那之后你才应该隐藏状态栏。我不确定 为什么 这行得通,但确实如此。你可以这样做:
// 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
之前被选中。因此,我们需要告诉视图控制器在 window 显示后再次检查。同样,我不知道为什么会这样,但确实如此。如果有人能解释这个现象(为什么这个顺序很重要),那将是对这个解决方案的一个很好的补充。