好的,我正在尝试向表格视图单元格添加一个按钮。我的表格视图单元格有一个图像,标签和一个按钮。我将按钮设置为隐藏在故事板中。现在我试图显示标签文本被截断的按钮,我在故事板中将标签上的行数设置为3。它可以正常工作但是当我向上和向下滚动时,某些标签文本没有被截断的单元格会显示一个按钮。为什么呢?
这是我的手机文件的外观。
class ItemCell: UITableViewCell {
@IBOutlet weak var itemImageView: UIImageView!
@IBOutlet weak var itemTitleLabel: UILabel!
@IBOutlet weak var itemDetailLabel: UILabel!
@IBOutlet weak var moreButton: UIButton!
var item: Item? {
didSet {
configureCell()
}
}
private func configureCell() {
guard let item = item else { return }
itemImageView.image = item.image
itemTitleLabel.text = item.name
itemDetailLabel.text = item.description
if itemDetailLabel.isTruncated {
moreButton.isHidden = false
} else {
moreButton.isHidden = true
}
}
extension UILabel {
var isTruncated: Bool {
guard let labelText = text else {
return false
}
let labelTextSize = (labelText as NSString).boundingRect(
with: CGSize(width: frame.size.width, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: font],
context: nil).size
return labelTextSize.height > bounds.size.height
}
}
这就是我的cellForRowAt的样子。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as? ItemCell else {
return UITableViewCell()
}
let item = categories[indexPath.section].items[indexPath.row]
cell.item = item
print("Name: \(item.name)\nSection: \(indexPath.section)\nRow: \(indexPath.row)\nisTruncated: \(cell.itemDetailLabel.isTruncated)\n")
return cell
}