2015-06-22 82 views
0

我有一个自定义的UITableViewCell,里面有两个标签。一个标签包含一个单词的简短定义,另一个包含一个较长的定义,仅在选中单元格时显示。短定义的长度区分单词和单元格,因此为单元格设置明确的高度有时会切断部分定义。问题是,如果我使用UITableViewAutomaticDimension,单元格会将其高度设置为适合较长定义标签的高度,即使此时隐藏较长的定义标签。这在单元格中留下了很多空白区域。当单元格被轻敲时,出现较长的定义标签,较短的一个消失,并且单元格正确展开。我怎样才能设置我的细胞的动态高度,这将适用于较短和较长的标签,以便在不需要时可以移除这个额外的空白区域?UITableViewCell,设置动态高度w /多个标签

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

编辑:我使用

的definitionLabel之前是隐藏的电池在didSelectRowAtIndexPath方法触摸的自定义单元格。我需要单元格在不同时间符合definitionLabel和quickDefinitionLabel的高度。

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

使用: tableView.estimatedRowHeight =“小区的UI高度” tableView.rowHeight = UITableViewAutomaticDimension –

回答

0

下的iOS 8和自动布局,你只需要在你的ViewDidLoad两行代码:

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 

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

根本不需要heightForRowAtIndexPath方法。

+0

我之前已经试过这一点,它不适合我遗憾的是解决问题。我的意思是它按照它应该的方式工作,但不能解决我的多余空白问题。我的问题是,我有一个隐藏的标签,直到单元格被触摸。在大多数情况下,标签包含很多文字,所以非常高。单元格仍然符合该标签的高度,即使单元格首次出现时隐藏。这给我留下了很大的空白空间,因为单元格符合隐藏标签。这就是我使用heightForRowAtIndexPath的原因。我希望这是有道理的。 – user3353890

+0

啊,我明白了。是的,我想我会将隐藏标签的高度设置为0,并将其向上移动足够远以至于不会影响行高度,然后将其重新移回,恢复标签高度,并在我想要显示时取消隐藏它。 –

0

我发现了一个工作,我没有设置长定义文本,直到选中单元格为止......它清除了空白问题,似乎为我想要的工作而工作。