我对带有黑色背景的状态栏中的光内容有一个要求,但是有些屏幕需要白色背景的黑色状态栏内容,因此我将基于视图控制器的状态栏外观保持为在info.plist中采用基于视图控制器要求的状态栏样式。
我的问题是,每当我从任何视图控制器显示SFSafariViewController时,默认情况下它都采用黑色状态栏内容和白色背景,即状态栏样式每次都是、.default、。
我尝试过在preferredStatusBarStyle子类中重写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)
}
}发布于 2019-05-20 07:16:09
将modalPresentationCapturesStatusBarAppearance设置为从呈现视图控制器接管状态栏外观的控制。
@IBAction func presentSafari(sender: AnyObject) {
let safari = SFSafariViewController(url: URL(string: "https://www.google.com/")!)
safari.delegate = self
safari.modalPresentationCapturesStatusBarAppearance = true
if #available(iOS 10.0, *) {
safari.preferredBarTintColor = .yellow
} else {
// Fallback on earlier versions
safari.view.tintColor = .yellow
}
present(safari, animated: true) {
}
}
extension SFSafariViewController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}当您通过调用
present(_:animated:completion:)方法显示视图控制器时,状态栏外观控件只有在所呈现的控制器的modalPresentationStyle值为UIModalPresentationStyle.fullScreen的情况下才会从呈现状态转移到呈现视图控制器。通过将此属性设置为true,您可以指定呈现的视图控制器控制状态栏外观,即使显示为非全屏。
输出:截图

https://stackoverflow.com/questions/56162346
复制相似问题