美文网首页
SFSafariViewController Reader 填坑

SFSafariViewController Reader 填坑

作者: JinyaMax | 来源:发表于2018-03-26 02:34 被阅读659次

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

    相关文章

      网友评论

          本文标题:SFSafariViewController Reader 填坑

          本文链接:https://www.haomeiwen.com/subject/lgllcftx.html