我在nib文件中有一个表视图,它可以正确加载数据。它会加载所需数量的单元格并正确填写数据。该单元格也是一个xib文件,其中包含多个视图。每个单元都有一个自定义的高度。我设法使用以下方法设置了每个单元格的正确高度:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return (data[indexPath.row].height + 200)
}
问题在于,在初始加载时,像这样无法正确绘制单元格: Initial load image
描述区域不会移动到我通过更改其X和Y坐标使其移动的位置。
但是,当我将表格视图滚动到最初加载的单元格之外并返回到它们时,该问题已得到解决,如下所示: After scrolling
加载单元格后,我将描述区域移动到图像下方。这适用于单元格,但不适用于最初加载的单元格。仅当我将破碎的单元格移出视线并返回到它们时,它才能修复。我该如何解决?我如何才能使单元在初始载荷下正确绘制?
编辑:要澄清:单元已正确加载,但绘制不正确。我必须从前几个单元格中滚动出来,然后再滚动回到它们,以便正确绘制这些单元格。
感谢您的帮助。谢谢!
答案 0 :(得分:1)
我可以看到您要加载的图像的尺寸大于图像容器视图的尺寸。 您可以尝试将clipsToBound = True赋予imageView。
这很可能会解决您的问题。 谢谢。
答案 1 :(得分:0)
您要根据其中的图像来增加UITableViewCell
的高度,对吧?
这是tableview数据源和委托。
扩展名MyDataSource:UITableViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = self.rowHeights[indexPath.row] {
return height
} else {
return 100
}
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if let height = self.rowHeights[indexPath.row] {
return height
} else {
return 100
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return mydatas.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let mydata = mydatas[indexPath.row]
var cell: UITableViewCell
cell = tableView.dequeueReusableCell(withIdentifier: 'myCell.cellIdentify()')!
cell.contentView.backgroundColor = UIColor.clear
cell.backgroundColor = UIColor.clear
cell.tag = indexPath.row
cell.selectionStyle = .none
let image = UIImage(named: promotion)
(cell as! myCell).configureCell(downloadImage: image!)
let aspectRatio = (image?.size.height)!/(image?.size.width)!
let imageHeight = (cell.contentView.frame.width * aspectRatio) + 16
UIView.performWithoutAnimation {
self.myTableView?.beginUpdates()
self.rowHeights[indexPath.row] = imageHeight
self.myTableView?.endUpdates()
}
return cell
}
}
这是UITableViewCell
自定义类。
myCell
import UIKit
class myCell: UITableViewCell {
@IBOutlet weak var imageHolder: WMView!
@IBOutlet weak var actionImage: UIImageView!
@IBOutlet weak var loaderIndicator: UIActivityIndicatorView!
override func prepareForReuse() {
super.prepareForReuse()
self.loaderIndicator.isHidden = false
self.loaderIndicator.startAnimating()
self.actionImage.image = nil
}
static func cellHeight() -> CGFloat {
return 73.0
}
static func cellIdentify() ->String {
return "myCell"
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
func configureCell(downloadImage: UIImage) {
self.imageHolder.layer.borderWidth = 1
self.imageHolder.layer.cornerRadius = 5
self.imageHolder.layer.borderColor = UIColor.clear.cgColor
self.imageHolder.layer.masksToBounds = true
self.imageHolder.clipsToBounds = true
//ImageHolder
self.actionImage.image = downloadImage
self.loaderIndicator.isHidden = true
}
}