gpt4 book ai didi

ios - 自定义 UITableView 单元格图像转换不适用于可重用单元格

转载 作者:行者123 更新时间:2023-11-29 05:30:17 24 4
gpt4 key购买 nike

我有一个自定义 UITableViewCell,它在左侧显示圆形图像。由于 UITableViewCell 提供的默认 UIImageView 与行的高度相同,因此图像最终几乎接触在一起。我想稍微缩小图像以创建一些额外的填充。

我能够使用以下代码使其工作

override func layoutSubviews() {
super.layoutSubviews()

// Make the image view slightly smaller than the row height
self.imageView!.transform = CGAffineTransform(scaleX: 0.9, y: 0.9)

// Round corners
self.imageView!.layer.cornerRadius = self.imageView!.bounds.height / 2.0
self.imageView!.layer.borderWidth = 0.5
self.imageView!.layer.borderColor = UIColor.gray.cgColor
self.imageView!.layer.masksToBounds = true
self.imageView!.contentMode = .scaleAspectFill;

self.updateConstraints()
}

override func prepareForReuse() {
super.prepareForReuse()
self.imageView!.image = nil
self.layoutSubviews()
}

这仅适用于表格 View 首次出现在屏幕上时显示的单元格。一旦我滚动(即使可重复使用的单元出列),就不​​再应用转换。下图显示了表格 View 的左侧。我已经捕获了原始单元格转换为重复使用的单元格的区域。

enter image description here

为了完整起见,这是我的 tableView(cellForRowAt:) 函数

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = self.itemTableView.dequeueReusableCell(withIdentifier: "ItemCell") as! InventoryItemTableViewCell

if let items = self.displayedItems {
if indexPath.row < items.count {
let item = items[indexPath.row]

cell.item = item
cell.textLabel!.text = items[indexPath.row].partNumber
cell.detailTextLabel!.text = items[indexPath.row].description

if let quantity = items[indexPath.row].quantity {
cell.quantityLabel.text = "Qty: \(Int(quantity))"
}
else {
cell.quantityLabel.text = "Qty: N/A"
}

if let stringImageBase64 = item.imageBase64 {
let dataDecoded: Data = Data(base64Encoded: stringImageBase64, options: .ignoreUnknownCharacters)!
cell.imageView!.image = UIImage(data: dataDecoded)
}
else {
cell.imageView!.image = blankImage
}
}
}

return cell
}

我尝试了其他方法,例如使用 ImageView 的插图,但这没有效果。

问题

为什么在创建表格时将转换应用于原始单元格而不是任何重复使用的单元格?我应该以不同的方式处理这个问题吗?

最佳答案

我能够使用以下代码完成图像大小的调整。看起来自动布局是在转换之后应用的,因此覆盖它。

    override func layoutSubviews() {
// Layout all subviews except for the image view
super.layoutSubviews()

// Make the image view slightly smaller than the row height
self.imageView!.frame = CGRect(x: self.imageView!.frame.origin.x + 4,
y: self.imageView!.frame.origin.y + 4,
width: 56,
height: 56)

// Round corners
self.imageView!.layer.cornerRadius = self.imageView!.frame.height / 2.0
self.imageView!.layer.borderWidth = 0.5
self.imageView!.layer.borderColor = UIColor.gray.cgColor
self.imageView!.layer.masksToBounds = false
self.imageView!.clipsToBounds = true
self.imageView!.contentMode = .scaleAspectFit;
}

关于ios - 自定义 UITableView 单元格图像转换不适用于可重用单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57668527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com