Стиль строки состояния SFSafariViewController
Мой стиль строки состояния приложения UIStatusBarStyleLightContent
, и он установлен в моем корневом контроллере как preferredStatusBarStyle
.
Теперь у меня есть проблема, что при открытии SFSafariViewController
из моего приложения он унаследовал стиль строки состояния, который является легким и невидимым на белом фоне SFSafariViewController
.
Есть ли способ установить стиль статусной панели для SFSafariViewController?
P.S. Я попытался подклассифицировать SFSafariViewController и переопределить этот метод, но это не помогает.
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
Update:
[[UIApplication sharedApplication] setStatusBarStyle:] делает трюк, но этот метод устарел в iOS 9.
Ответы
Ответ 1
Вышеупомянутые ответы идут слишком далеко. У вас нет подкласса SFSafariViewController
вообще.
Просто установите modalPresentationCapturesStatusBarAppearance = true
в свой экземпляр SFSafariViewController
, и он будет обрабатывать остальные самостоятельно.
Это работает, потому что его собственный по умолчанию preferredStatusBarStyle
, как вы уже догадались, .default
. Иерархия представления по-прежнему полагается на контроллер представления представления для отображения строки состояния, поэтому, установив modalPresentationCapturesStatusBarAppearance
в true
, ресивер будет запрашивать внешний вид строки состояния.
TL; DR
safariViewController.modalPresentationCapturesStatusBarAppearance = true
выполнит трюк.
Ответ 2
Это не лучшее решение, но оно работает.
class MySafariViewContoller: SFSafariViewController {
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
UIApplication.sharedApplication().statusBarStyle = .Default
}
override func viewWillDisappear(animated: Bool) {
super.viewWillAppear(false)
UIApplication.sharedApplication().statusBarStyle = .LightContent
}
}
Измените .Default и .LightContent, как вы предпочитаете.
Ответ 3
Вы можете использовать расширения.
extension SFSafariViewController {
override open func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
UIApplication.shared.statusBarStyle = .default
}
override open func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
UIApplication.shared.statusBarStyle = .lightContent
}
}
Ответ 4
Как насчет этого?
class MyCustomSafariViewController: SFSafariViewController {
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
}
Или частный API - если вы можете его использовать.