代码之家  ›  专栏  ›  技术社区  ›  Krunal

WKWebView与UIWebView

  •  4
  • Krunal  · 技术社区  · 7 年前

    我有一个部署目标版本为iOS 10的应用程序/项目。

    UIWebView ,现在已被弃用,取而代之的是 WKWebView

    这迫使我要么使用 UIWebView (使用iOS 10)或将部署目标更改为iOS 11。

    我无法更改部署目标,但作为一个中间件解决方案,我添加了对两者的代码(编程)支持。我的意思是,如果用户的设备操作系统是iOS 11(或更高版本),那么使用 WKWebView else使用 (适用于iOS 10或更低版本)。

    发行声明: Storyboard的view controller不支持这两个版本,我的意思是,在Storyboard中,如果我将view controller的部署目标设置为iOS 11,则应用程序会在iOS 10中崩溃(显然它应该崩溃),如果我将view controller的部署目标设置为iOS 10,则Storyboard不允许我构建项目。

    WKWebView 显示此错误: Xcode 9 GM - WKWebView NSCoding support was broken in previous versions

    问题: 如何制作故事板(视图控制器)以使用 WKWebView 对于iOS 11和 UIWebView 对于iOS 10?故事板(视图控制器)中是否有任何配置设置或选项允许我添加两个接口插座?

    1 回复  |  直到 6 年前
        1
  •  6
  •   DonMag    7 年前

    可以 只需创建并添加 WKWebView 通过代码。

    如果您想在故事板中为布局目的提供视觉表现,这里有一种方法。

    添加标准 UIView 在故事板的视图控制器中。这将充当web视图的“持有者”。将其连接到 IBOutlet viewDidLoad 添加的实例 作为该“holder”视图的子视图。

    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
    
        }
    
    }