Ios UITableView内部UITableView单元格从底部剪切
我有一个包含7种UITableViewCells的垂直列表。其中一个由单元内的UITableView组成 我的要求是主tableview应该根据单元格的内部tableview contentSize自动调整单元格大小。操作系统内部的tableview将显示其完整长度,滚动将关闭 工作正常,但仅适用于具有tableview的单元格。当我在内部tableview上方引入UIImageView(带有异步加载图像)时,单元格的总高度略小于其内容的实际高度。因此,内部的tableview从底部开始被切割 下面是bug的一个表示 我正在根据宽度设置UImageView的高度以正确缩放:Ios UITableView内部UITableView单元格从底部剪切,ios,swift,uitableview,autoresize,Ios,Swift,Uitableview,Autoresize,我有一个包含7种UITableViewCells的垂直列表。其中一个由单元内的UITableView组成 我的要求是主tableview应该根据单元格的内部tableview contentSize自动调整单元格大小。操作系统内部的tableview将显示其完整长度,滚动将关闭 工作正常,但仅适用于具有tableview的单元格。当我在内部tableview上方引入UIImageView(带有异步加载图像)时,单元格的总高度略小于其内容的实际高度。因此,内部的tableview从底部开始被切割
if let media = communityPost.media, media != "" {
postImageView.sd_setImage(with: URL(string: media), placeholderImage: UIImage(named: "placeholder"), options: .highPriority) { (image, error, cache, url) in
if let image = image {
let newWidth = self.postImageView.frame.width
let scale = newWidth/image.size.width
let newHeight = image.size.height * scale
if newHeight.isFinite && !newHeight.isNaN && newHeight != 0 {
self.postViewHeightConstraint.constant = newHeight
} else {
self.postViewHeightConstraint.constant = 0
}
if let choices = communityPost.choices {
self.datasource = choices
}
self.tableView.reloadData()
}
}
} else {
self.postViewHeightConstraint.constant = 0
if let choices = communityPost.choices {
datasource = choices
}
tableView.reloadData()
}
内部表视图是UITableView的一个子类:
class PollTableView: UITableView {
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return self.contentSize
}
override var contentSize: CGSize {
didSet{
self.invalidateIntrinsicContentSize()
}
}
override func reloadData() {
super.reloadData()
self.invalidateIntrinsicContentSize()
}
}
主表视图设置为使用automaticDimension调整大小:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cellHeights[indexPath] = cell.frame.size.height
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return cellHeights[indexPath] ?? UITableView.automaticDimension
}
我似乎不明白出了什么问题。感谢您的帮助。
谢谢。当表格视图要求您估算行高时,您正在调回表格视图。因此,您没有向它提供任何它还没有的信息。
问题可能在于您的异步加载图像,因此您应该预测图像大小,并在图像尚未加载时为表视图提供正确估计的行高。如何预测图像大小?这实际上取决于您的应用程序。数据来自哪里?如果记录是从数据库/云/服务器检索的,那么它们应该包含一个描述图像大小的字段。好的。后端团队将添加映像的维度。我想那会有用的。我将计算单元格的高度加上图像高度和表格内容大小高度。