iOS:WKWebView Vs UIWebView
我有一个应用程序/项目与部署目标版本 – iOS 10。
我已经使用了UIWebView
,现在已经废弃,并被WKWebView
取代。 所以,我想用我的项目中的WKWebViewreplaceUIWebView。
它迫使我使用UIWebView
(iOS 10)或将部署目标更改为iOS 11。
我不能改变部署目标,但作为一个中间件解决scheme,我添加了代码(编程)支持。 我的意思是,如果用户的设备操作系统是iOS 11(或以上),那么使用WKWebView
否则使用UIWebView
(iOS 10或更低版本)。
问题陈述:故事板的视图控制器不支持这两个版本,我的意思是,在故事板中,如果我将View Controller的部署目标设置为iOS 11,那么应用程序在iOS 10中崩溃(并且应该是明显的),如果我将视图控制器的部署目标设置为iOS 10,那么故事板不允许我build立项目。
对于iOS 10, WKWebView
显示我这个错误: Xcode 9 GM – WKWebView NSCoding支持在以前的版本中被破坏
问题:如何让故事板(视图控制器)使用iOS 11的WKWebView
和iOS 10的UIWebView
? 故事板(视图控制器)中是否有configuration设置或选项,可以让我添加两个接口?
你可以通过代码简单地创build和添加一个WKWebView
。
如果您想要在Storyboard中进行布局,请使用以下方法。
在你的视图控制器添加一个标准的UIView
在你的故事板。 这将作为您的Web视图的“持有者”。 将它连接到一个IBOutlet
,然后在viewDidLoad
添加一个WKWebView
的实例作为该“持有者”视图的子视图。
class MyViewController: UIViewController, WKNavigationDelegate { // standard UIView, added in Storyboard @IBOutlet weak var webViewHolder: UIView! // instance of WKWebView let wkWebView: WKWebView = { let v = WKWebView() v.translatesAutoresizingMaskIntoConstraints = false return v }() override func viewDidLoad() { super.viewDidLoad() // add the WKWebView to the "holder" UIView webViewHolder.addSubview(wkWebView) // pin to all 4 edges wkWebView.topAnchor.constraint(equalTo: webViewHolder.topAnchor, constant: 0.0).isActive = true wkWebView.bottomAnchor.constraint(equalTo: webViewHolder.bottomAnchor, constant: 0.0).isActive = true wkWebView.leadingAnchor.constraint(equalTo: webViewHolder.leadingAnchor, constant: 0.0).isActive = true wkWebView.trailingAnchor.constraint(equalTo: webViewHolder.trailingAnchor, constant: 0.0).isActive = true // load a URL into the WKWebView if let url = URL(string: "https://google.com") { wkWebView.load(URLRequest(url: url)) } // from here on out, use wkWebView just as if you had added it in your storyboard } }