【iOS开发】伪造一个 SFSafariViewController

2019-04-11 16:34:11 浏览数 (1)

iOS 9 中的 SFSafariViewController 可以使我们非常方便的传入一个 url 来展示一个网页,调用起来是下面这样:

代码语言:javascript复制
let safari = SFSafariViewController(URL: url)
self.presentViewController(safari, animated: true, completion: nil)

这里我尝试给出一个简化版(仅仅展示网页,没有其他功能)的 SFSafariViewController,来方便地在 iOS 9 以下的系统中调用。

代码语言:javascript复制
import UIKit
import WebKit

// 如果用户使用 iOS 8,则没有 SFSafariViewController,用这个 VC 来加载一个网页
class FakeSafariViewController: UIViewController {
    
    var url:NSURL!
    let webview = WKWebView()
    
    
    // MARK: - Init
    convenience init (URL: NSURL) {
        self.init()
        self.url = URL
    }
    
    
    
    // MARK: - Main
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // webview
        webview.frame = self.view.frame
        webview.loadRequest(NSURLRequest(URL: url))
        view.addSubview(webview)
        
        // 屏幕旋转监听
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "screenRotate:",
            name: UIDeviceOrientationDidChangeNotification, object: nil)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    func screenRotate(notification:NSNotification) {
        webview.frame = self.view.frame
    }
}

调用时,表现起来和 SFSafariViewController 是一样的:

代码语言:javascript复制
let realSafari = SFSafariViewController(URL: url)
let fakeSafari = FakeSafariViewController(URL: url)

当然,如果如果你要在 iOS 8 以下的环境中使用的话,把 WKWebView 换成 UIWebView 就好了。


【Github】这段代码出现在了 SwiftGG 项目

0 人点赞