Swift-基于图像宽高比的动态UITableViewCell大小

我正在尝试创建动态大小的UITableViewCells,根据从服务器下载的图像的长宽比更改高度。

例如,如果图像的高度是其宽度的两倍,我希望UITableViewCell的高度是屏幕宽度的两倍,以便图像可以占据屏幕的整个宽度并保持宽高比。

我试图做的是在单元格中添加约束,并使用UITableViewAutomaticDimension来计算高度,但是我面临的问题是,在下载图像之前,我不知道图像的纵横比,因此单元格开始了较小,然后手动刷新tableView时,单元格将以正确的大小显示。

我不希望在下载图像时重新加载每个单元都是执行此操作的好方法。

这种方法是最好的方法吗?我一生无法思考该怎么做,因为在初始化单元时,我不知道单元格内部的宽高比。

回答:

为此,我首先使用字典[Int:CGFloat]来保留计算出的单元格高度,然后在heightForRowAtIndexpath方法中使用字典中保留的值,在cellForRowAtIndexpath方法中,您应该下载图像,计算纵横比,将单元格宽度或图像宽度乘以您的长宽比,并将计算出的高度放到字典中相应的IndexPath号中

在类似这样的代码中,这是使用alamofire加载图像的代码示例

    var rowHeights:[Int:CGFloat] = [:] //declaration of Dictionary

//My heightForRowAtIndexPath method

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

if let height = self.rowHeights[indexPath.row]{

return height

}else{

return defaultHeight

}

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

if let cell = tableView.dequeueReusableCell(withIdentifier: "ImageCell") as? ImageCell

{

let urlImage = Foundation.URL(string: "http://imageurl")

cell.articleImage.af_setImage(withURL: urlImage, placeholderImage: self.placeholderImage, filter: nil, imageTransition: .crossDissolve(0.3), completion: { (response) in

if let image = response.result.value{

DispatchQueue.main.async {

let aspectRatio = (image! as UIImage).size.height/(image! as UIImage).size.width

cell.articleImage.image = image

let imageHeight = self.view.frame.width*aspectRatio

tableView.beginUpdates()

self.rowHeights[indexPath.row] = imageHeight

tableView.endUpdates()

}

}

})

}

我希望这有帮助

以上是 Swift-基于图像宽高比的动态UITableViewCell大小 的全部内容, 来源链接: utcz.com/qa/399475.html

回到顶部