SFSafariViewController
是 iOS 9.0 之后提供的一個(gè)經(jīng)過(guò)完整封裝的 Safari Controller鹃觉。App 經(jīng)常有展示協(xié)議或是幫助文檔的需求赤惊,傳入URL
,直接使用 SFSafariViewController
+ Reader
模式非常方便而且體驗(yàn)良好。
要注意的是, 此處的URL
必須帶上HTTP://
或者HTTPS://
協(xié)議前綴,否則 SFSafariViewController
無(wú)法加載。
在 iOS 11 之前涡驮,SFSafariViewController
的初始化方法是這樣的:
init(url: URL, entersReaderIfAvailable: Bool)
iOS 11.0 之后,這個(gè)初始化方法 Deprecated
了喜滨。
改為:
init(url: URL)
init(url: URL, configuration: SFSafariViewController.Configuration)
寫之前沒(méi)仔細(xì)看文檔捉捅,我直接使用第一個(gè)初始化方法寫成:
let protocolVC = SFSafariViewController(url: protocolUrl)
protocolVC.delegate = self
protocolVC.configuration.entersReaderIfAvailable = true
self.present(protocolVC, animated: true, completion: nil)
然而發(fā)現(xiàn)頁(yè)面并未能如預(yù)期那樣進(jìn)入 Reader
模式。查看其定義發(fā)現(xiàn)這是個(gè)坑:
/*! @abstract A copy of the configuration with which the view controller was
initialized. */
@available(iOS 11.0, *)
@NSCopying open var configuration: SFSafariViewController.Configuration { get }
所以 在實(shí)例化一個(gè) SFSafariViewController
后虽风,直接修改其 configuration
是行不通的棒口,要換個(gè)初始化方法了:
let config = SFSafariViewController.Configuration()
config.entersReaderIfAvailable = true
let protocolVC = SFSafariViewController(url: protocolUrl)
protocolVC.delegate = self
self.present(protocolVC, animated: true, completion: nil)
這時(shí)再展示一篇博客寄月、協(xié)議或是一篇新聞時(shí),就會(huì)自動(dòng)進(jìn)入Reader
模式了无牵。