为什么自定义UITableViewCell中的UILabel无法返回正确的高度?

时间:2018-08-22 06:44:01

标签: ios swift uitableview

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

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
    }
}

1 个答案:

答案 0 :(得分:0)

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

在前两个单元格上正确设置约束,因此您无需对136和50进行硬编码。

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

您将需要将单元格的状态(已扩展或未扩展的状态)存储在某个位置,以便在上下滚动时可以正确启用/禁用高度限制。