【发布时间】:2015-11-26 03:33:16
【问题描述】:
我已经为这个问题苦苦挣扎了 3 天,但仍然无法弄清楚。我希望这里的任何人都可以帮助我。
目前,我有一个带有自定义单元格(UITableViewCell 的子类)的 UITableView。在这个自定义单元格中,有许多 UILabel 并且它们都正确设置了自动布局(固定到单元格内容视图)。这样,无论UILabel是长文本还是短文本,单元格高度都可以显示适当的高度。
问题是,当我尝试将 UILabel 之一(底部)设置为隐藏时,内容视图不会相应地调整高度,例如单元格。
我的不足是我将一个 Hight Constraint 从 Interface Builder 添加到底部标签,并带有以下内容。
Priority = 250 (Low)
Constant = 0
Multiplier = 1
这用虚线制作了约束。然后,在 Swift 文件中,我输入了以下代码。
override func viewDidLoad() {
super.viewDidLoad()
//Setup TableView
tableView.allowsMultipleSelectionDuringEditing = true
//For tableView cell resize with autolayout
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 200
}
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
let cell = tableView.cellForRowAtIndexPath(indexPath) as! RecordTableViewCell
cell.lbLine.hidden = !cell.lbLine.hidden
if cell.lbLine.hidden != true{
//show
cell.ConstrainHeightForLine.priority = 250
}else{
//not show
cell.ConstrainHeightForLine.priority = 999
}
//tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)
return indexPath
}
棘手的是,当我调用 tableView.reloadRowAtIndexPaths() 时,单元格会显示正确的高度,但有一个错误,它必须通过双击(选择)来触发行而不是单击。
为此,我还尝试了 willSelectRowAtIndexPath 方法中的以下代码,但它们都不起作用。
cell.contentView.setNeedsDisplay()
cell.contentView.layoutIfNeeded()
cell.contentView.setNeedsUpdateConstraints()
如图 2 所示,UILabel 6 可能带有长文本,当我隐藏此视图时,内容视图仍显示为与隐藏前一样大。 请指出我错在哪里,我将不胜感激。
【问题讨论】:
-
您能否展示描述约束的 IB 屏幕截图?这可能会提供更好的图片。
-
尝试将 tableView.rowHeight = UITableViewAutomaticDimension 移动到索引路径处的行单元格,并在 willSelect 方法中重新加载 tableView。如果它不起作用,则尝试将主视图添加到覆盖整个单元格的单元格,然后添加您需要的那些标签。将该主视图固定到单元格的 4 个侧面以调整单元格的大小。希望它会有所帮助!
-
@Shripada ,由于名声,我只能放两张 imgur 的照片,请看一下。谢谢
标签: ios swift uitableview autolayout