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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UITableViewCell - Swift 3中删除标签后仍然保持约束相关的知识,希望对你有一定的参考价值。

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

enter image description here

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

enter image description here

我尝试过很多方法。

  1. 使用2个不同的单元格并切换,但这不起作用,因为一次只返回一个费用而我的tableviewcontroller没有正确填充。
  2. 尝试使用堆栈视图,但在那里,我无法获得匹配的限制,因为它们是当前的。

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

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

这是切换单元格的代码。

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

这是有效的,但它会降低顶部和底部的高度,我只希望减少顶部的高度。

答案

你不应该使用委托方法heightForRowAt,你应该使用:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 80 

然后给(费用日期)标签一个高度约束并连接一个出口。

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

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

以上是关于如何在UITableViewCell - Swift 3中删除标签后仍然保持约束的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 9.0.1 单元格大小的 UITableviewcell 中它不会在运行时扩展?

swift 在swif打开网址

swif解决手势冲突

Swif基础语法01

swif tableview全选

swif-throws异常抛出