目前,我有一个看起来像这样的tableviewcell
我想要发生的是,如果已经存在日期费用,顶部标签应该消失,tableviewcell高度应该从95减少到64,并且所有内容都应该集中对齐。有点像这样
我尝试过很多方法。
使用2个不同的单元格并切换,但这并不起作用,因为一次只返回一个费用而我的tableviewcontroller没有正确填充。
尝试使用堆栈视图,但是在那里,我无法获得与当前匹配的约束。
我在heightForRowAtIndexPath方法中返回了所有正确的行高,但它集中降低了高度,并且一些数据被剪切掉了。
如何实现我想做的事情(标签不可见,行高减少,一切垂直居中)?
这是切换单元格的代码。
func tableView(_ tableView: UITableView,
heightForRowAt indexPath: IndexPath) -> CGFloat
{
if newMode==true {
return 95
}
else if newMode==false {
return 64
}
else {
return 0
}
}
这样可行,但它会降低顶部和底部的高度,我只希望减少顶部的高度。
答案 0 :(得分:0)
您不应该使用委托方法heightForRowAt
,而应使用:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 80
然后给(费用日期)标签一个hight约束并连接一个插座。
cellForRowAtIndex
委托方法中的应具有:
if expense != nil
{
lblExpenseConstraintHeight.constant = 0
}
else
{
lblExpenseConstraintHeight.constant = 34
}
cell.layoutIfNeeded()
修改强>
有关动态tableViewHeight的更多信息:
Using Auto Layout in UITableView for dynamic cell layouts & variable row heights
另一种可能的解决方案是删除(费用日期)标签的高度约束,并将其文本设置为空字符串。