首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使SFSafariViewController状态条样式为lightContent

无法使SFSafariViewController状态条样式为lightContent
EN

Stack Overflow用户
提问于 2019-05-16 06:45:02
回答 1查看 1K关注 0票数 8

我对带有黑色背景的状态栏中的光内容有一个要求,但是有些屏幕需要白色背景的黑色状态栏内容,因此我将基于视图控制器的状态栏外观保持为在info.plist中采用基于视图控制器要求的状态栏样式。

我的问题是,每当我从任何视图控制器显示SFSafariViewController时,默认情况下它都采用黑色状态栏内容和白色背景,即状态栏样式每次都是、.default、

我尝试过在preferredStatusBarStyle子类中重写SFSafariViewController,到目前为止还没有看到。

下面是我的代码

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-05-20 07:16:09

modalPresentationCapturesStatusBarAppearance设置为从呈现视图控制器接管状态栏外观的控制。

代码语言:javascript
复制
@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,您可以指定呈现的视图控制器控制状态栏外观,即使显示为非全屏。

输出:截图

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56162346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档