我正在尝试在tableview中制作动态图像高度。我使用SDWebImage从URL下载图像。但它没有在少数初始单元
上工作以下是我写的方法
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let shareDetailCell = tableView.dequeueReusableCell(withIdentifier: THShareDetailTableViewCell.className, for: indexPath) as! THShareDetailTableViewCell
shareDetailCell.selectionStyle = UITableViewCellSelectionStyle.none
shareDetailCell.likeButton.tag = indexPath.row
//to set image dynamic height
shareDetailCell.selectionStyle.socialPostImage.sd_setImage(with: URL(string: socialInteraction[indexpath.row].largeImageUrl), placeholderImage: nil, options: .retryFailed) { (image, error, imageCacheType, imageUrl) in
if image != nil {
let imgHeight = (image?.size.height)!
shareDetailCell.heightConstraintSocialImage.constant = (imgHeight * (self.socialPostImage.frame.size.width/imgHeight))
}else {
print("image not found")
}
}
return shareDetailCell
}
答案 0 :(得分:2)
从你的代码工作中我发现了两件事,
永远不要从UITableViewAutomaticDimension
返回estimatedHeightForRowAt
,因为估计的高度永远不会是自动的,否则x-code无法理解它应该返回的高度。有时它有效,但不被认为是一种好的做法。
您在cellForRowAt
方法中获取图像,这意味着您获取图像时已经设置了单元格的高度。因此,当系统在UITableViewAutomaticDimension
方法之后知道该单元格的高度时,您的单元格图像只有高度heightForRowAt
。
建议你的问题。
获取数据然后重新加载tableView
,以便根据图像高度调整单元格高度。您也可以在分页中执行此操作。