Скрыть строку состояния swift 4
Я пытаюсь скрыть строку состояния в одном из моих UIViewControllers (Swift 4).
-
Во-первых, я устанавливаю Просмотр состояния строки на основе контроллера на ДА в Info.plist
.
-
Я переопределил свойство prefersStatusBarHidden
в моем контроллере:
override var prefersStatusBarHidden: Bool {
return true
}
- И в
viewDidLoad()
я добавил функцию setNeedsStatusBarAppearanceUpdate()
, чтобы заставить свойство prefersStatusBarHidden
читать.
После всего этого я все еще вижу строку состояния на UIViewController
.
Может кто-нибудь мне помочь, пожалуйста?
Ответы
Ответ 1
Вероятно, вы уже нашли свое собственное решение, но я получил его так:
override func viewWillAppear(_ animated: Bool) {
// Sets the status bar to hidden when the view has finished appearing
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
// Sets the status bar to visible when the view is about to disappear
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = false
}
Ответ 2
Вы можете скрыть строку состояния в любом или всех ваших контроллерах представлений, просто добавив этот код:
override var prefersStatusBarHidden: Bool {
return true
}
Любой контроллер просмотра, содержащий этот код, по умолчанию будет скрывать строку состояния.
Если вы хотите анимировать строку состояния в или из нее, просто вызовите setNeedsStatusBarAppearanceUpdate() на свой контроллер представлений - это заставит prefersStatusBarHidden читать снова, на котором вы можете вернуть другое значение. Если вы хотите, ваш вызов setNeedsStatusBarAppearanceUpdate() может фактически находиться внутри блока анимации, что приводит к тому, что строка состояния скрывается или отображается плавно.
Ответ 3
Если вы представляете контроллер представления по модулю, попробуйте
viewController.modalPresentationCapturesStatusBarAppearance = true
Ответ 4
Хотя некоторые реализации более чистые, такие как:
UIApplication.shared.isStatusBarHidden = true
Во время переходов есть несколько странных анимаций отсечения. Хотя более многословно, я предпочитаю решение @MachTurtle:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
if let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as? UIView{
statusBar.isHidden = true
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.isHidden = false
}
Попробуйте, отлично работает для меня.
Ответ 5
Попробуйте установить флажок "Просмотр состояния панели управления на основе контроллера" в Info.plist на "YES". Это заставит приложение вызвать свойство prefersStatusBarHidden: Bool
на каждом контроллере представления.
![Просмотреть флаг состояния строки состояния на основе контроллера]()
Ответ 6
Используйте следующий код
UIApplication.shared.isStatusBarHidden = true
Это единственное, что я обнаружил в iOS11.
вы можете написать в didFinishLaunchingWithOptions
или в 'viewWillAppear' из вас BaseViewController
Наслаждайтесь.
Ответ 7
Как вы сказали, вы используете UINavigationController для перехода к своему настраиваемому контроллеру представлений. Я полагаю, вы установили свой контроллер пользовательского вида в качестве корневого представления вашего UINavigationController. В этом случае переопределение var prefersStatusBarHidden в вашем настраиваемом контроллере просмотра не будет работать, но вам придется подклассифицировать ваш контроллер UINavigation и переопределить свойство там, как показано ниже:
class CustomNavigationController: UINavigationController {
override var prefersStatusBarHidden: Bool {
return true
}
}
Ответ 8
Когда вы пытаетесь перегрузить свойства строки состояния для ViewController, который в UINavigationStack - вам нужно сделать расширение ниже
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return self.topViewController
}
}
тогда ваши перегруженные свойства станут активными
Ответ 9
Попробуйте проверить Скрыть строку состояния в разделе Общие параметров вашего проекта.
![Скрыть строку состояния в разделе]()
Ответ 10
Ни один из них не работал у меня, работая над преобразованным проектом в iOS 11. Вот что я сделал. Я добавил этот код в AppDelegate
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool
{
application.isIdleTimerDisabled = true
application.isStatusBarHidden = true
return true
}
Ответ 11
Просто измените ограничение "Top Space to" на ваш вид из Безопасной области в Superview. И он будет перетаскивать ваш вид под строкой состояния, поэтому его не нужно будет скрывать
] 1
Ответ 12
Я обнаружил, что prefersStatusBarHidden
не вызывался в моем контроллере представления, потому что я использовал настраиваемое представление контейнера, и мне нужно было переслать строку состояния, скрывающую ответственность, в дочерний контроллер представления. Реализация var childForStatusBarHidden: UIViewController? { return childViewController }
var childForStatusBarHidden: UIViewController? { return childViewController }
в контроллере представления контейнера, если для меня.
Ответ 13
Необходимо написать код в контроллере представления контейнера, если это дочерний контроллер представления
override var prefersStatusBarHidden: Bool {
return true
}
Ответ 14
Добавьте это в ваш info.plist
<key>UIStatusBarHidden</key>
<true/>
Ответ 15
Я искал это, и одна работа для меня -
Swift 5
override var prefersStatusBarHidden: Bool {
return true
}
Ответ 16
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView{
statusBar.isHidden = true
}
}