SFSafariViewController
是 iOS 9.0 之后提供的一个经过完整封装的 Safari Controller。App 经常有展示协议或是帮助文档的需求,传入URL
,直接使用 SFSafariViewController
+ Reader
模式非常方便而且体验良好。
要注意的是, 此处的URL
必须带上HTTP://
或者HTTPS://
协议前缀,否则 SFSafariViewController
无法加载。
在 iOS 11 之前,SFSafariViewController
的初始化方法是这样的:
init(url: URL, entersReaderIfAvailable: Bool)
iOS 11.0 之后,这个初始化方法 Deprecated
了。
改为:
init(url: URL)
init(url: URL, configuration: SFSafariViewController.Configuration)
写之前没仔细看文档,我直接使用第一个初始化方法写成:
let protocolVC = SFSafariViewController(url: protocolUrl)
protocolVC.delegate = self
protocolVC.configuration.entersReaderIfAvailable = true
self.present(protocolVC, animated: true, completion: nil)
然而发现页面并未能如预期那样进入 Reader
模式。查看其定义发现这是个坑:
/*! @abstract A copy of the configuration with which the view controller was
initialized. */
@available(iOS 11.0, *)
@NSCopying open var configuration: SFSafariViewController.Configuration { get }
所以 在实例化一个 SFSafariViewController
后,直接修改其 configuration
是行不通的,要换个初始化方法了:
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let protocolVC = SFSafariViewController(url: protocolUrl)
protocolVC.delegate = self
self.present(protocolVC, animated: true, completion: nil)
这时再展示一篇博客、协议或是一篇新闻时,就会自动进入Reader
模式了。
网友评论