如何根据动态图像URL的高度来调整UIImageView的大小,并将其放在UITableview的自定义单元格中?
问题描述:
我有一个UIImageView和一些其他组件在一个单独的xib文件中,我正在加载到我的UITableview中,该文件位于UIView子类中,并且动态分配来自URL的图像。如何根据动态图像URL的高度来调整UIImageView的大小,并将其放在UITableview的自定义单元格中?
现在的问题是,我想调整UIImageView和Tableview行的高度,具体取决于从URL中动态获取的图像大小。我得到的工作使用下面的代码,
if let bpImageUrls = singleComponent["picture_link"]{
cell.newsImage.sd_setShowActivityIndicatorView(true)
cell.newsImage.sd_setIndicatorStyle(.gray)
cell.newsImage.sd_setImage(with: URL(string: bpImageUrls as! String))
let imageData = NSData(contentsOf:URL(string: bpImageUrls as! String)!)
let myImage = UIImage(data: imageData! as Data)
let aspectRatio = (myImage?.size.height)!/(myImage?.size.width)!
cell.imageHeightConstraint.constant = UIScreen.main.bounds.size.width * aspectRatio
}
它的工作原理就像一个魅力,但问题是,这会减慢的UITableView的滚动事件,当我试图做下载图像异步和更新在主线程中查看,它不工作。
该视图与像这样的image这样的自动布局绑定在一起,我一直在努力。任何见解都会有所帮助。谢谢。
答
当您异步加载图像时,表格视图已经完成单元格的布局。只是根据图像高度改变单元格的高度约束不会改变表格视图中单元格的高度。
您必须在更改高度约束后使表格视图重新计算单元格的高度。因此,当图像加载并且单元格的高度约束发生变化时,请通过调用以下方式告诉表格视图以重新加载该单元格:
if let indexPath = tableView.indexPath(for: cellWithImage) {
tableView.reloadRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
}