swift iOS 11.2 WKWebView 不显示

Posted

技术标签:

【中文标题】swift iOS 11.2 WKWebView 不显示【英文标题】:swift iOS 11.2 WKWebView doesn't show up 【发布时间】:2018-06-21 02:12:34 【问题描述】:

我正在尝试在我的应用程序中实现一个简单的网络浏览器。 因为我需要控制 cookie,所以我决定使用 WKWebView。

官方的例子效果很好,但是那个例子1)不使用storyboard 2)直接将view设置为webview

所以我将我的 WKWeView 添加到情节提要并连接到插座,然后在 viewDidLoad 中加载 URL:

class BrowserViewController: UIViewController, WKUIDelegate, WKNavigationDelegate 

    @IBOutlet var webView: WKWebView!

    override func viewDidLoad() 
        super.viewDidLoad()
        print("browser view loaded")
        webView.uiDelegate = self
        webView.navigationDelegate = self

        let myURL = URL(string: "https://www.youku.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)

    


    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


我的故事板:

但是,当我在模拟器中运行我的应用程序时,WKWebView 没有出现:

我该如何解决这个问题?谢谢。

更新:

这是视图的布局和约束

更新:

所以我删除了所有不必要的约束,布局似乎是固定的。但是,网络视图仍然是空白的。

如果我在viewDidLoad 的末尾添加一行view = webView。网页正确呈现。

(由于某些原因图片会上传,我稍后再试)

更新:

很遗憾,将所有内容移至 viewWillAppear 也不起作用。

    override func viewWillAppear(_ animated: Bool) 
        super.viewWillAppear(animated)
        print("browser view loaded")

        webView.uiDelegate = self
        webView.navigationDelegate = self

        let myURL = URL(string: "https://www.bing.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    

Webview 仍然是空白的。

【问题讨论】:

您是否在 webView 中添加了约束?可能是它已加载,但它在屏幕上根本不可见,因为它的位置不正确。您的搜索栏似乎发生了变化,因此 webView 可能做了同样的事情。 是的,webview 和工具栏在堆栈视图中。并且两者都有正常的约束,即顶部、底部、前导、尾随 要确认问题是否与自动布局有关,请禁用控制器的自动布局并查看它是否可见。 我不知道如何关闭它。谷歌也没有明确的方法来做到这一点。如果我删除所有约束,自动布局是否被视为禁用? 以编程方式添加 webView,而不是通过故事板或 xib 【参考方案1】:

我认为您的问题与 StackView 选项有关。请同时显示您为 StackView 设置了什么设置?对齐和分布是主要的。

尝试设置:

Alignment -> Center Distribution -> Fill

从 Toolbar 和 WebView 中删除所有约束,只保留 Toolbar Height = 56。这是 StackView 内唯一需要的约束。此外,请确保您保留 StackView 的约束,因为它们定义了其中包含的对象的约束。 确保您的视图周围没有红色边框(如果它是红色的,那么您错过了一些东西)。

【讨论】:

谢谢,我已经编辑了我的问题。还是有问题。【参考方案2】:

我发现了如何让它发挥作用,但其背后的原因仍然是个谜。

显然,如果我将 WKWebView 移出堆栈视图,它会很好地呈现网页。

附:网址改为https://www.bing.com

【讨论】:

这绝对是冲突/约束不足的问题。要么你有冲突的约束将 web 视图拖出视图区域,要么你没有正确指定堆栈视图的 DistributionAlignment 属性。【参考方案3】:

删除 IBOutlet 并再次尝试连接到插座。

可能是

import UIKit
import WebKit

class ViewController: UIViewController 
    @IBOutlet weak var webView: WKWebView!

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        print("browser view loaded")
        webView.uiDelegate = self
        webView.navigationDelegate = self

        let myURL = URL(string: "https://www.youku.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    


extension ViewController: WKUIDelegate 



extension ViewController: WKNavigationDelegate 


【讨论】:

很奇怪。我删除了出口并再次添加,但没有任何改变。看起来代码是正确的?我想知道我哪里做错了...... 试试 Stack View Axis is Vertical

以上是关于swift iOS 11.2 WKWebView 不显示的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 - iOS 11.2上的UICollectionview问题

swift 笔记:iOS与JavaScript的交互(三):WKWebView 1.新建WKWebView加载本地,远程页面

在 WKWebView (iOS, Swift) 中使用本地 Javascript 源加载本地 HTML

iOS Swift5.0 WKWebView使用JS与Swift交互

swift [初学者来自iOS中WKWebView的简单浏览器] Chp6的青铜挑战程序设计查看Big Nerd Ranch #tags:swift3,ios,UIView,WKWebview

swift - UIWebView 和 WKWebView(iOS12 之后替换UIWebView)