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 标签