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 введите описание изображения здесь