У меня есть требование, чтобы в строке состояния было светлое содержимое с черным фоном, однако на некоторых экранах требуется черный контент строки состояния с белым фоном, поэтому я оставил для параметра Просмотр внешнего вида строки состояния на основе контроллера значение ДА в 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)
}
}