gpt4 book ai didi

ios - 隐藏状态栏但不隐藏自定义 UIWindow

转载 作者:行者123 更新时间:2023-11-28 06:13:55 37 4
gpt4 key购买 nike

我有一个自定义的 UIWindow,它是我自己的状态栏,所以我想隐藏状态栏并显示我的状态栏。我有

override var prefersStatusBarHidden: Bool {
return true
}

在我的 UIWindow 的 rootViewController 和主 ViewController 中。这隐藏了状态栏,但它也隐藏了我的 UIWindow。我的 UIWindow 的 windowLevelUIWindowLevelStatusBar + 1,但是我测试了其他的 windowLevel 并且无论级别如何它都是隐藏的。

不能为我的自定义 UIWindow 设置不透明背景。

如何隐藏状态栏而不是我的自定义 UIWindow?

最佳答案

编辑:更好的解决方案

和之前/下面的一样,但实际代码更短、更简单、更 Swifty。

在你的 AppDelegate 中,有

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
myStatusBarWindow.isHidden = false
return true
}

当然,还有隐藏系统状态栏。在build设置或 info.plist 中执行此操作,或者在您的 View Controller 中执行此操作,比如

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 之前被选中。因此,我们需要告诉 View Controller 在窗口显示后再次检查。同样,我不知道为什么会这样,但确实如此。如果有人能解释这种现象(为什么这个顺序很重要),那将是对该解决方案的极好补充。

关于ios - 隐藏状态栏但不隐藏自定义 UIWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45683835/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com