无法使SFSafariViewController状态栏样式为lightContent

Dha*_*ena 7 statusbar ios swift sfsafariviewcontroller ios12

我对黑色背景的状态栏中的内容有轻度要求,但是某些屏幕需要白色背景的黑色状态栏内容,因此我在info.plist中将基于View控制器的状态栏外观保持为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)
    }
}

Run Code Online (Sandbox Code Playgroud)

sta*_*Man 0

iOS 10.0+

首选条形颜色

用于为导航栏和工具栏的背景着色的颜色。

参考:https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller/2274394-preferredbartintcolor


由于您的View controller-based status bar appearance设置为YESin Info.plist,您将需要在 上应用颜色信息preferredBarTintColor,如下所示:

let safari = SFSafariViewController(url: URL(string: "https://google.com")!)

//This:
safari.preferredBarTintColor = .black

present(safari, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

而且...不需要以下内容:

extension SFSafariViewController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        return .default
    }
}
Run Code Online (Sandbox Code Playgroud)