【问题标题】:SFSafariViewController init method forced to use iOS11 supported versionSFSafariViewController init方法强制使用iOS11支持版本
【发布时间】:2017-06-09 06:40:21
【问题描述】:

随着 Xcode 9 Beta 和 iOS11 预览版的最新更新,SFSafariViewController init 方法发生了一些变化。

@available(iOS 11.0, *)
public init(url URL: URL, configuration: SFSafariViewController.Configuration)

@available(iOS, introduced: 9.0, deprecated: 11.0)
public convenience init(url URL: URL, entersReaderIfAvailable: Bool)

从 iOS11 开始支持一种新的 init 方法,而当前可用的 init 方法将被 iOS11 弃用。问题是当前方法没有暴露,也不能被覆盖。如果我们想使用测试版运行现有项目,这将强制使用新的init 方法。有没有人找到在新 Xcode Beta 中使用现有 init 方法的方法?

编辑:为澄清起见,这是我的子类中 init 方法的 sn-p

class BPSafariViewController: SFSafariViewController {
    override init(url URL: URL, entersReaderIfAvailable: Bool) {
        super.init(url: URL, entersReaderIfAvailable: entersReaderIfAvailable)
        if #available(iOS 10.0, *) {
            preferredControlTintColor = UIColor.BPUIColor()
        } else {
            view.tintColor = UIColor.BPUIColor()
        }
    }
}

【问题讨论】:

    标签: ios xcode sfsafariviewcontroller xcode9-beta


    【解决方案1】:

    您可以在检查iOS 版本时执行此操作,如下所示。

    var safariController: SFSafariViewController?
    if #available(iOS 11.0, *) {
        safariController = SFSafariViewController(url: URL(string: "your_url")!)
    } else {
        safariController = SFSafariViewController(url: URL(string: "")!, entersReaderIfAvailable: true)
    }
    

    【讨论】:

    • 嗨,索希尔。感谢您的回答。我使用 init 方法作为 SFSafariViewController 子类的覆盖。
    • @JohnKuan 这是init 本身。您在上面遇到了什么错误?
    • 我正在使用 SFSafariViewController 的现有子类,因此我需要可用的覆盖方法。问题是这个init 方法已被标记为弃用,我不得不使用另一个init
    【解决方案2】:

    更改不推荐使用的功能:

    super.init(url: url, entersReaderIfAvailable: true) 
    

    到:

    let config = SFSafariViewController.Configuration()
    config.entersReaderIfAvailable = true
        
    super.init(url: url, configuration: config)
    

    【讨论】:

      【解决方案3】:

      我找到了一个可能的解决方案,依赖于另一个 convenience 方法。虽然我不能使用entersReaderIfAvailable 选项,但它现在适用于我的应用程序。

      convenience init(url URL: URL) {
          self.init(url: URL)
          //code
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        相关资源
        最近更新 更多