Скрыть строку состояния, но не пользовательское окно UIWindow
У меня есть пользовательское окно UIWindow, которое является моей собственной строкой состояния, поэтому я хочу скрыть строку состояния и показать вместо нее. я имею
override var prefersStatusBarHidden: Bool {
return true
}
И в rootViewController моего UIWindow, и в основном ViewController. Это скрывает строку состояния, но также скрывает мое окно UIWindow. Мое окно windowLevel
является UIWindowLevelStatusBar + 1
, но я проверял другие windowLevel
и он был спрятан независимо от уровня.
Установка непрозрачного фона для моего пользовательского окна UIWindow не возможна.
Как я могу скрыть строку состояния, но не мое пользовательское окно UIWindow?
1 ответ
Изменить: лучшее решение
То же самое относится и к предыдущему / ниже, но на самом деле код короче, проще и Swifty.
В вашем 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
}
Намного лучше:)
Старое решение
К сожалению, я не могу найти то, что, вероятно, лучший ответ, но у меня есть обходной путь:
Сначала покажите свое окно. Только после этого вы должны скрыть строку состояния. Я не уверен, почему это работает, но это работает. Вы можете сделать это так:
// 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
, Таким образом, мы должны сказать контроллеру представления, чтобы он проверил снова, как только окно показывается Опять же, я не знаю, почему это работает, но это работает. Если кто-то может объяснить это явление (почему этот порядок имеет значение), это было бы отличным дополнением к этому решению.