1

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

@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如果我们想使用 beta 运行现有项目,这将强制使用新方法。有没有人找到init在新的 Xcode Beta 中使用现有方法的方法?

init编辑:为澄清起见,这是我的子类中的方法片段

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()
        }
    }
}
4

3 回答 3

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)
}
于 2017-06-09T06:58:58.423 回答
1

更改不推荐使用的功能:

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

至:

let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
    
super.init(url: url, configuration: config)
于 2021-12-09T16:07:12.663 回答
0

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

convenience init(url URL: URL) {
    self.init(url: URL)
    //code
}
于 2017-06-13T10:40:41.643 回答