Safari View Controller использует неправильный цвет строки состояния
В моем приложении используется темный цвет панели навигации. Поэтому я устанавливаю цвет строки состояния в белый (так что он имеет хороший контраст).
![красная панель навигации с белой статусной полосой]()
Я сделал это, установив barStyle в черный (чтобы сделать строку состояния белым), а также установите barTint на мой темно-красный цвет. Прекрасно работает.
Я представляю a SafariViewController
следующим образом:
func openWebsite(urlString: String) {
if let url = NSURL(string: urlString) {
let svc = SFSafariViewController(URL: url)
svc.delegate = self
self.presentViewController(svc, animated: true, completion: nil)
}
}
Однако строка состояния представленного SafariViewController
по-прежнему белая. Это проблема, потому что панель навигации SVC
имеет стандартный белый стандарт по умолчанию для iOS по умолчанию. Таким образом, строка состояния в основном невидима.
![контроллер просмотра сафари с белым цветом строки состояния]()
Как я могу это исправить?
Ответы
Ответ 1
Это можно сделать, обернув SFSafariViewController с помощью подкласса UINavigationController.
BlackStatusBarNavigationController.h
@interface BlackStatusBarNavigationController : UINavigationController
@end
BlackStatusBarNavigationController.h
@interface BlackStatusBarNavigationController ()
@end
@implementation BlackStatusBarNavigationController
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
@end
Использовать так:
UINavigationController *navigationController = [[BlackStatusBarNavigationController alloc] initWithRootViewController:viewController];
navigationController.navigationBarHidden = YES;
[self presentViewController:navigationController animated:YES completion:nil];
Ответ 2
Есть два способа переопределить preferredStatusBarStyle в вашем viewControllers и вернуть тот, который вы хотите
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .Default
}
или вы можете установить его вручную с помощью
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: UIStatusBarAnimation.None)
как бы для его настройки через sharedApplicaion вам нужно добавить это в свой plist
"Просмотр состояния строки состояния на основе контроллера" на NO
![введите описание изображения здесь]()