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 视图拖出视图区域,要么你没有正确指定堆栈视图的 Distribution 和 Alignment 属性。【参考方案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