我有一个滚动整个视图的要求,它包含customView和WebView。结构如下图所示:
因此,我选择scrollView作为superView使其滚动。我使用snapkit来布局所有视图。我向scrollView添加了一个containsView,它包含了customView和webView。代码如下:
func setupScrollView() {
view.addSubview(scrollView)
scrollView.snp.makeConstraints { (make) in
make.edges.equalTo(view)
}
scrollView.addSubview(containView)
containView.snp.makeConstraints { (make) in
make.left.right.equalTo(view)
make.top.bottom.equalTo(scrollView)
}
}
func setupHeaderView() {
containView.addSubview(headerView)
headerView.snp.makeConstraints { (make) in
make.left.right.equalTo(view)
make.top.equalTo(containView)
}
}
func setupWebView() {
containView.addSubview(webView)
webView.navigationDelegate = self
webView.scrollView.bounces = false
webView.scrollView.isScrollEnabled = false
loadLocalHtml()
}
我已经阅读了一些关于如何获取webView高度的文档,它等待webView加载完成,然后设置webView的高度。它可以使scrollView工作。所以我想遵循这个想法,但我有不同的情况:
1)当webView加载完成时,我需要加载本地html。我需要提出从服务器获取数据的请求。
2)然后我调用webView的js方法将数据填充到html。 html包含图像和文本。
我已经考虑过如何做到这一点。因此,当调用js方法成功时,我获得了webView的高度。以下代码:
func updateWebView(_ json: String) {
let userId = userManager.currentUserId()
webView.evaluateJavaScript("updateData(\(json),'\(userId)')") { [weak self](response, error) in
guard let strongself = self else { return }
if error == nil {
strongself.settingconstraints()
}
}
}
func settingconstraints() {
webView.snp.updateConstraints { make in
make.left.right.equalTo(view)
make.top.equalTo(headerView.snp.bottom)
make.height.equalTo(webView.scrollView.contentSize.height)
make.bottom.equalTo(containView)
}
}
但它无法滚动,我现在不知道如何解决它?请帮忙。谢谢
答案 0 :(得分:0)
您是否尝试过将webView设为固定高度&宽度? 如果scrollview中内容的大小不大于scrollview本身的大小,则不会滚动!
它看起来也许有一个顶部/底部配对而高度约束可能会导致问题?