У меня есть требование содержания света в строке состояния с черным фоном, однако для некоторых экранов требуется содержание строки состояния черного цвета с белым фоном, поэтому я сохранил Просмотр внешнего вида строки состояния на основе контроллера для ДА в info.plist для принятия стиля строки состояния на основе требования контроллеров представления.
Моя проблема заключается в том, что всякий раз, когда я представляю SFSafariViewController с любого контроллера представления, он по умолчанию принимает содержимое строки состояния черного цвета и белый фон, т.е. стиль строки состояния .default каждый раз.
Я попытался переопределить предпочитаемое значениеStatusBarStyle в подклассе SFSafariViewController, и пока что не смотрю.
Ниже мой код
import UIKit
import SafariServices
extension SFSafariViewController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .lightContent
}
}
class MyViewController: UIViewController, SFSafariViewControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.barTintColor = UIColor.lightGray
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
@IBAction func presentSafari(sender: AnyObject) {
let safari = SFSafariViewController(url: URL(string: "https://www.google.com/")!)
safari.delegate = self
present(safari, animated: true) {
}
}
// MARK: - SFSafariViewControllerDelegate
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
dismiss(animated: true, completion: nil)
}
}