为啥我的 UIScrollView 中的 WKWebview 没有显示?

Posted

技术标签:

【中文标题】为啥我的 UIScrollView 中的 WKWebview 没有显示?【英文标题】:Why my WKWebview inside my UIScrollView is not displayed?为什么我的 UIScrollView 中的 WKWebview 没有显示? 【发布时间】:2019-01-09 10:27:00 【问题描述】:

我需要在 UIScrollView 的内容视图中添加一个 WKWebview 来加载网页内容。

我正在使用 Apple 代码加载网页,我的出口 viewForWebview 已正确链接,并调用了 didFinish

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate 

    var webView: WKWebView!
    @IBOutlet var viewForWebview: UIView!

    override func loadView() 
        super.loadView()
        let myConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: myConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        viewForWebview = webView
    

    override func viewDidLoad() 
        super.viewDidLoad()

        let url = URL(string: "https://www.google.com.au")
        let request = URLRequest(url: url!)
        webView.load(request)
    

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 
        print("Finished navigating to url \(String(describing: webView.url))")
    

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) 
        print(error)
    

但是我的 WKWebview 是空白的:

只是为了测试,我尝试直接在滚动视图的内容视图中显示 WKWebview,它可以工作。

为什么它不能作为内容的子视图?

【问题讨论】:

您的框架设置为零。 webView = WKWebView(frame: .zero, configuration: myConfiguration) 尝试为 WkWebView 添加约束。还要将 webview 添加到子视图中。 viewForWebview.addSubview(webView) 【参考方案1】:

不要为此类操作覆盖 loadView ,您需要

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate 

    var webView: WKWebView!
    @IBOutlet var viewForWebview: UIView!


    override func viewDidLoad() 
        super.viewDidLoad()


        let myConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame:.zero, configuration: myConfiguration)
        webView.uiDelegate = self
        webView.navigationDelegate = self
        viewForWebview.addSubview(webView)
        webView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            webView.topAnchor.constraint(equalTo: viewForWebview.topAnchor),
            webView.bottomAnchor.constraint(equalTo: viewForWebview.bottomAnchor),
            webView.leadingAnchor.constraint(equalTo: viewForWebview.leadingAnchor),
            webView.trailingAnchor.constraint(equalTo: viewForWebview.trailingAnchor)

        ])

        let url = URL(string: "https://www.apple.com")
        let request = URLRequest(url: url!)
        webView.load(request)
    

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) 
        print("Finished navigating to url \(String(describing: webView.url))")
    

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) 
        print(error)
    

【讨论】:

我注意到在 iPhone X/Xs/Xs 上,即使使用 viewForWebview 将 webview 顶部约束设置为 0,webview 也会出现在顶部,您知道解决方案吗?

以上是关于为啥我的 UIScrollView 中的 WKWebview 没有显示?的主要内容,如果未能解决你的问题,请参考以下文章

当我删除 UIpanguesture 时,为啥我的 UIScrollView 不滚动?

为啥当键盘弹出时我的 UIScrollView 滚动错误?

为啥我的 UIView 在滚动时会在 UIScrollView 内移动?

为啥我的 uicollectionview 不随底层 uiscrollview 一起移动?

为啥我的 [UIScrollView removeFromSuperview] 崩溃了?

为啥程序背景会减慢 UIScrollView?