帖子详情帖子内容后面有一大段空白
kaich opened this issue · comments
我看了你的源码,自己试着用你的代码加载其他网页,发现有的时候帖子下面会有一大段的空白,应该是webview内容计算高度有问题?同样一个网页一下进去高度正常,一会进去又有一大段空白,这种情况大概会是什么问题啊?
ps. 为什么不加上发帖子功能呢?
我还不太理解你描述的问题。
显示帖子的cell会自动适应网页的高度
具体实现如下,你可以参考下找找原因
首先 cell 内的 webView 是和cell本身一样大的,通过约束布局。
当cell 自身变大时,webView也会跟着一起调整大小
self.contentWebView!.snp_makeConstraints{ (make) -> Void in
make.left.top.right.bottom.equalTo(self.contentView)
}
然后当webView 内容高度产生变化时,会调用 contentHeightChanged 闭包。通知viewController
self.KVOController.observe(self.contentWebView!.scrollView, keyPath: "contentSize", options: [.New]) {
[weak self] (observe, observer, change) -> Void in
if let weakSelf = self {
let size = change![NSKeyValueChangeNewKey] as! NSValue
weakSelf.contentHeight = size.CGSizeValue().height;
weakSelf.contentHeightChanged?(weakSelf.contentHeight)
}
}
然后在 viewController 里,当webView内容高度有变化时,则会刷新UITableView,更新cell的高度
self.webViewContentCell!.contentHeightChanged = { [weak self] (height:CGFloat) -> Void in
if let weakSelf = self {
//在cell显示在屏幕时更新,否则会崩溃会崩溃会崩溃
if weakSelf.tableView.visibleCells.contains(weakSelf.webViewContentCell!) {
if weakSelf.webViewContentCell?.contentHeight > 1.5 * SCREEN_HEIGHT{ //太长了就别动画了。。
UIView.animateWithDuration(0, animations: { () -> Void in
self?.tableView.beginUpdates()
self?.tableView.endUpdates()
})
}
else {
self?.tableView.beginUpdates()
self?.tableView.endUpdates()
}
}
}
}
当cell的高度改变时,由于webView和cell之间的约束,webView也会跟着一起调整大小。
最后 cell、webView控件和 webView内容的高度,都将一致。
这里基本能实现我的需求
但如果你是加载远程站点,需要注意这里有个问题
我是监听 webView 的 scorllView 中的 contentSize 属性。来达到监听内容高度的功能。
但是这个属性并不是 内容高度。
当这个contentSize > 内容高度时,内容高度变化时, contentSize将不再变化
只有当内容高度 > contentSize 时,contentSize 将会调整到 适应内容高度
也就是说如果你的 contentSize的高度达到过1000 ,那么就算内容高度变得小于1000了 ,contentSize的高度都是1000
也就是可能会出现一大段空白
@Finb 非常感谢,受教了。应该是你说的 当这个contentSize > 内容高度时,内容高度变化时, contentSize将不再变化
,如果是这样的话,那如何当帖子contentSize > 内容高度 ,内容高度变化时,监听到它的实际高度啊?
@Finb 我找到问题了,原因的确如你所说的那样,我本来想找找那如何当帖子contentSize > 内容高度 ,内容高度变化时,监听到它的实际高度啊?
的方法,现在回头看看它的html中图片元素是这样的。
<img id="aimg_RBktT" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" width="401" file="http://images.weiphone.net/data/attachment/forum/201508/14/113556ulrrntnetxxjqnrc.png" border="0" alt="" src="http://images.weiphone.net/data/attachment/forum/201508/14/113556ulrrntnetxxjqnrc.png" lazyloaded="true" _load="1">
它把img的高度给写死了。这样虽然在ios中会适配,图片会变得比电脑上面的小,高度自然就少了。然后就造成了你说的那个问题,于是我在onload的时候中加了的javascript脚本,把img的width属性给删掉了。
img.removeAttribute('width')
这样之后所有的内容高度就正常了。
非常感谢你的帮助啊。看你代码风格和swift使用都挺不错的。大牛👍!
有什么办法可以直接拿到 Contentsize 最后的值吗? 或者说有什么方法可以知道他的 Contentsize 什么时候计算完吗?