如何在UITableViewCell - Swift 3中删除标签后仍然保持约束

时间:2017-12-21 04:33:33

标签: ios uitableview swift3 autolayout

目前,我有一个看起来像这样的tableviewcell

enter image description here

我想要发生的是,如果已经存在日期费用,顶部标签应该消失,tableviewcell高度应该从95减少到64,并且所有内容都应该集中对齐。有点像这样

enter image description here

我尝试过很多方法。

  1. 使用2个不同的单元格并切换,但这并不起作用,因为一次只返回一个费用而我的tableviewcontroller没有正确填充。

  2. 尝试使用堆栈视图,但是在那里,我无法获得与当前匹配的约束。

  3. 我在heightForRowAtIndexPath方法中返回了所有正确的行高,但它集中降低了高度,并且一些数据被剪切掉了。

    如何实现我想做的事情(标签不可见,行高减少,一切垂直居中)?

    这是切换单元格的代码。

    func tableView(_ tableView: UITableView,
                   heightForRowAt indexPath: IndexPath) -> CGFloat
    {
            if newMode==true {
                return 95
            }
            else if newMode==false {
                return 64
            }
            else {
                return 0
            }
    }
    

    这样可行,但它会降低顶部和底部的高度,我只希望减少顶部的高度。

1 个答案:

答案 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

另一种可能的解决方案是删除(费用日期)标签的高度约束,并将其文本设置为空字符串。