【问题标题】:How to embed WKWebView inside custom UIView properly?如何在自定义 UIView 中正确嵌入 WKWebView?
【发布时间】:2017-01-20 22:15:28
【问题描述】:

在我的项目中,我有一个视图控制器,我想在其中显示嵌入在另一个 UIView 中的 WKWebView,标题为 viewForEmbeddingWebView,这是我在情节提要中创建的(图片为灰色)。

我已经在我的 ViewController 中实现了这个逻辑:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate  {

    var webView: WKWebView!

    @IBOutlet weak var viewForEmbeddingWebView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView = WKWebView(frame: viewForEmbeddingWebView.frame, configuration: WKWebViewConfiguration() )
        self.viewForEmbeddingWebView.addSubview(webView)
        self.webView.allowsBackForwardNavigationGestures = true
        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)

    }

}

在模拟器中构建并运行后,我看到以下内容:

它显示 WKWebView 但边界看起来不对(首先:它不适合 viewForEmbeddingWebView 的边界,其次:顶部有一个白色间隙)。我读过我必须在苹果网站https://developer.apple.com/reference/webkit/wkwebview 上使用 WKWebView,但他们的例子不是我的情况,因为他们只展示了如何处理在 ViewController 的整个视图中加载 WKWebView 的情况。但我需要将它嵌入到另一个视图中,因为稍后我还需要围绕这个 WKWebView 的另一个 ui。在 WKWebView 之前有 WebView,但自从 iOS 8 出现后,我们必须使用 WKWebView。请帮忙,因为我检查了很多材料,但没有找到与 Swift 3 和 Xcode 8 配合得很好的答案。

我在 iOS 10.2 中使用 Xcode 8 和 Swift 3。

【问题讨论】:

    标签: swift swift3 xcode8 wkwebview wkwebviewconfiguration


    【解决方案1】:

    你想像这样初始化WKWebView (Swift 3.0):

    webView = WKWebView(frame: viewForEmbeddingWebView.bounds, configuration: WKWebViewConfiguration())
    webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.viewForEmbeddingWebView.addSubview(webView)
    

    【讨论】:

    • 它正在工作,但问题没有完全解决。在您的解决方案中,我仍然在 WKWebView 顶部看到一个白色间隙。如何隐藏它?在我看来,它是 WKWebView 后面的白色滚动视图。如何让 WKWebView 适应它而没有这个空白?附:在您的解决方案中,我也没有看到 webView.uiDelegate = self 。我是否需要它才能使 WKWebView 正常工作?
    • 您能否添加一个屏幕截图,以便我们查看更改后的效果?您是否使用 Xcode 的视图层次结构调试器检查了您的应用程序? (developer.apple.com/library/content/documentation/…)
    • 通过添加解决空白空间:self.automaticallyAdjustsScrollViewInsets = false to viewDidLoad,谢谢。
    【解决方案2】:

    WKWebView Swift 5 或自定义 WKWebView(不推荐使用 Webview) 请按照以下 WKWebView 的 Apple 链接进行操作 - https://developer.apple.com/documentation/webkit/wkwebview

    如果你想在自定义视图中添加 WKWebView。请遵守守则。

     import WebKit 
    
     class OpenControllerURL: UIViewController,WKNavigationDelegate , WKUIDelegate {
    
      @IBOutlet weak var CustomView: UIView!
    
        override func viewDidLoad() {
        super.viewDidLoad()
    
        let url = URL(string: "https://developer.apple.com/documentation/webkit/wkwebview"!)
        let request = URLRequest(url: url!)
        let webView = WKWebView(frame: self.CustomView.frame)
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight] //It assigns Custom View height and width
        webView.navigationDelegate = self
        
        webView.load(request)
        self.CustomView.addSubview(webView)
    }
    

    #快乐编码!!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 2019-10-04
      • 2020-10-01
      相关资源
      最近更新 更多