为啥我的 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 不滚动?
为啥我的 UIView 在滚动时会在 UIScrollView 内移动?
为啥我的 uicollectionview 不随底层 uiscrollview 一起移动?