【发布时间】:2019-10-03 08:46:12
【问题描述】:
我需要在黑色背景的状态栏中显示浅色内容,但是某些屏幕需要带有白色背景的黑色状态栏内容,因此我保留了 基于视图控制器的状态栏外观在 info.plist 中设置为 YES 以根据视图控制器的要求采用状态栏样式。
我的问题是,每当我从任何视图控制器呈现 SFSafariViewController 时,它都会默认采用黑色状态栏内容和白色背景,即状态栏样式每次都是 .default。
我尝试在 SFSafariViewController 子类中覆盖 preferredStatusBarStyle,但目前没有查看。
下面是我的代码
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)
}
}
【问题讨论】:
标签: ios swift statusbar ios12 sfsafariviewcontroller