SFSafariViewController init 方法强制使用 iOS11 支持的版本
SFSafariViewController init method forced to use iOS11 supported version
随着 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
方法,而 iOS11 将弃用当前可用的 init 方法。问题是当前方法没有公开,无法覆盖。如果我们想使用测试版 运行 现有项目,这将强制使用新的 init
方法。有没有人找到在新的 Xcode Beta 中使用现有 init
方法的方法?
编辑:为了澄清,这是我子类
中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()
}
}
}
您可以在检查 iOS
版本时执行此操作,如下所示。
var safariController: SFSafariViewController?
if #available(iOS 11.0, *) {
safariController = SFSafariViewController(url: URL(string: "your_url")!)
} else {
safariController = SFSafariViewController(url: URL(string: "")!, entersReaderIfAvailable: true)
}
我找到了一个依赖于另一种 convenience
方法的可能解决方案。虽然我不能使用 entersReaderIfAvailable
选项,但它现在适用于我的应用程序。
convenience init(url URL: URL) {
self.init(url: URL)
//code
}
更改弃用的函数:
super.init(url: url, entersReaderIfAvailable: true)
至:
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
super.init(url: url, configuration: config)
随着 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
方法,而 iOS11 将弃用当前可用的 init 方法。问题是当前方法没有公开,无法覆盖。如果我们想使用测试版 运行 现有项目,这将强制使用新的 init
方法。有没有人找到在新的 Xcode Beta 中使用现有 init
方法的方法?
编辑:为了澄清,这是我子类
中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()
}
}
}
您可以在检查 iOS
版本时执行此操作,如下所示。
var safariController: SFSafariViewController?
if #available(iOS 11.0, *) {
safariController = SFSafariViewController(url: URL(string: "your_url")!)
} else {
safariController = SFSafariViewController(url: URL(string: "")!, entersReaderIfAvailable: true)
}
我找到了一个依赖于另一种 convenience
方法的可能解决方案。虽然我不能使用 entersReaderIfAvailable
选项,但它现在适用于我的应用程序。
convenience init(url URL: URL) {
self.init(url: URL)
//code
}
更改弃用的函数:
super.init(url: url, entersReaderIfAvailable: true)
至:
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
super.init(url: url, configuration: config)