UITableViewCell,使用多个标签设置动态高度

Posted

技术标签:

【中文标题】UITableViewCell,使用多个标签设置动态高度【英文标题】:UITableViewCell, set dynamic height w/ multiple labels 【发布时间】:2015-06-22 05:40:10 【问题描述】:

我有一个自定义 UITableViewCell,里面有两个标签。一个标签包含一个单词的简短定义,另一个包含一个较长的定义,仅在选择单元格时显示。短定义的长度区分单词和单元格,因此为单元格设置明确的高度有时会切断部分定义。问题是,如果我使用 UITableViewAutomaticDimension,则单元格将其高度设置为适合较长定义标签的高度,即使此时较长的定义标签被隐藏。这会在单元格中留下大量空白。当点击单元格时,较长的定义标签出现,较短的消失,单元格正确展开。如何为我的单元格设置动态高度以同时使用较短和较长的标签,以便在不需要时删除这些额外的空白?

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    if currentRow == indexPath.row 
        return UITableViewAutomaticDimension
     else 
        return 150.0
    

编辑:我正在使用的自定义单元格

definitionLabel 被隐藏,直到在 didSelectRowAtIndexPath 中触及单元格。我需要单元格在不同时间符合定义标签和快速定义标签的高度。

class ListTableViewCell: UITableViewCell 

    @IBOutlet weak var wordLabel: UILabel!
    @IBOutlet weak var definitionLabel: UILabel!
    @IBOutlet weak var quickDefinitionLabel: UILabel!

    override func awakeFromNib() 
        super.awakeFromNib()
        self.autoresizingMask = UIViewAutoresizing.FlexibleHeight
        self.clipsToBounds = true
        definitionLabel.hidden = true
    

    override func prepareForReuse() 
        self.wordLabel.textAlignment = NSTextAlignment.Left
        definitionLabel.hidden = true
        quickDefinitionLabel.hidden = false
    

【问题讨论】:

使用:tableView.estimatedRowHeight = "UI 中的单元格高度" tableView.rowHeight = UITableViewAutomaticDimension 【参考方案1】:

ios 8 和自动布局下,您只需在 ViewDidLoad 中输入两行代码:

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension

第一个数字应该是你最小的尺寸。

您根本不需要heightForRowAtIndexPath 方法。

【讨论】:

我以前试过这个,不幸的是它并没有解决我的问题。我的意思是它按预期工作,但不能解决我的多余空格问题。我的问题是我有一个隐藏的标签,直到单元格被触摸。在大多数情况下,标签包含大量文本,因此非常高。单元格仍然符合该标签的高度,即使在单元格第一次出现时它是隐藏的。这给我留下了很多空白,因为单元格符合隐藏标签。这就是我使用 heightForRowAtIndexPath 的原因。我希望这是有道理的。 啊,我明白了。是的,我想我会将隐藏标签的高度设置为 0 并将其向上移动足够远以至于它不会影响行高,然后将其向下移动,恢复标签高度,并在我想显示时取消隐藏它它。【参考方案2】:

我找到了一种解决方法,在选择单元格之前我不设置长定义文本...它清除了空白问题,并且似乎适用于我想要它的工作。

【讨论】:

以上是关于UITableViewCell,使用多个标签设置动态高度的主要内容,如果未能解决你的问题,请参考以下文章

具有动态高度的 UITableViewCell 中的多个 UILabel

UITableViewCell 中多个 UIlable 的自动布局

设置从 HTML 字符串生成的 UITableViewCell 标签

UITableViewCell 内的多个堆栈视图内的多行标签

UITableViewCell 子类不允许我设置标签文本

在单个 UITableViewCell 中管理多个 UITextField