SFSafariViewController Reader 填坑

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模式了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值