gpt4 book ai didi

ios - 为什么自定义 UITableViewCell 中的 UILabel 没有返回正确的高度?

转载 作者:行者123 更新时间:2023-11-30 11:13:25 25 4
gpt4 key购买 nike

我正在使用 UITableViewCell 的自定义子类,其中包含名为 descriptionLabelUILabel 自定义子类。我有一个名为 nativeHeight 的变量,它应该是单元格的高度,具体取决于标签中文本的长度。第 2+ 行的单元格高度设置为 50,除非它们被选中,此时它们会展开到 UILabel 可见的完整高度。但是,它没有返回正确的值来启用此功能。我将其定义如下(其中 116 是不包括 UILabel 的所有其他内容的固定高度):

var nativeHeight : CGFloat {
return self.descriptionLabel.intrinsicContentSize.height + 116
}

在单元格代码中调用该变量:

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if selected {
self.cellHeightConstraint.constant = self.nativeHeight
} else if !selected {
self.cellHeightConstraint.constant = 50
}
}

在 TableView 代码中也调用它:

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
switch indexPath.row {
case 0:
return 136
case 1:
return 50
default:
if selectedRow != nil && indexPath == selectedRow {

tableView.layoutIfNeeded()
let cell = self.tableView(tableView, cellForRowAt: indexPath) as! DynamicTableViewCell
cell.layoutIfNeeded()
return cell.nativeHeight

} else {
return 50
}
}
}

最佳答案

Rakesha 是正确的,您不需要 heightForRowAtIndexPath。如果您设置正确,一切都会为您计算。

正确设置前两个单元格的约束,这样您就不需要对 136 和 50 进行硬编码。

关于您的第三个单元格,我可能会考虑在您的描述标签上设置高度限制,即 50。当您希望单元格展开时,您只需停用高度限制并更新单元格布局即可。

您需要将单元格的状态(展开或未展开)存储在某处,以便当您上下滚动时可以正确启用/禁用高度约束。

关于ios - 为什么自定义 UITableViewCell 中的 UILabel 没有返回正确的高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51961103/

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