Я создаю временное окно UIWindow поверх главного окна, чтобы показать небольшой объем данных, наложенных на остальную часть моего приложения. Эта информация никоим образом не должна влиять на строку состояния. Обратите внимание, что оверлейное окно может быть запущено из контекста контроллера без представления, это означает, что текущий контроллер представления в верхней части стека главного окна может не знать о существовании оверлейного окна.
К сожалению, как только я выполняю overlayWindow.isHidden = false
, он передает управление строкой состояния (ее стиль и скрытность) контроллеру представления root моего оверлейного окна, и я не могу понять, как его остановить.
В качестве альтернативы, я мог бы просто «запомнить» предыдущее состояние строки состояния и сделать так, чтобы мой оверлей root просматривал вывод контроллера, но, похоже, нет хорошего способа узнать текущее состояние и видимость строки состояния в iOS 13, по крайней мере, которая учитывает модально представленные контроллеры представления, использующие новый эффект листа.
Как сделать так, чтобы мое оверлейное окно UIWindow надежно не влияло на строку состояния?
Редактировать: Я подготовил небольшой тестовый пример: https://github.com/Aquilosion/TestWindowView
Тестовый пример показывает Контроллер представления, который меняет внешний вид строки состояния каждую секунду. Вы можете снова открыть тот же контроллер представления в модальном режиме, и, несмотря на то, что он также запрашивает изменения строки состояния, iOS правильно блокирует строку состояния белым, потому что контроллер представления никогда не достигает ее в режиме листа. При открытии оверлея окна в настоящее время всегда отображается черная строка состояния, независимо от того, представлен модал или нет. Я пытаюсь установить дочернюю строку состояния в качестве root главного окна просмотра дочерней строки контроллера. В идеале iOS будет учитывать это и продолжать изменять стиль строки состояния, пока наложенное окно будет видимым.