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

Posted

技术标签:

【中文标题】即使在 UITableViewCell 中删除标签后如何保持约束 - Swift 3【英文标题】:How to maintain constraints even after deleting label in UITableViewCell - Swift 3 【发布时间】:2017-12-21 04:33:33 【问题描述】:

所以目前,我有一个看起来像这样的 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
        

这可行,但是它降低了顶部和底部的高度,我只希望降低顶部的高度。

【问题讨论】:

你能提供相关的代码吗?使用stackview应该可以完成。 使用stackView,一切都在一条线上,我无法应用约束。 发布您的代码@A.G 完成了,您还需要其他代码吗? @A.G 获取该标签的高度约束的出口,并在填充表格视图之前,检查是否存在日期费用,如果是,则设置高度约束 = 0 并更新单元格高度因此。我想你可以在这里使用枚举。 【参考方案1】:

您不应使用委托方法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

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

【讨论】:

这可行,但不会将单元格的高度降低到 64。它所做的只是使标签和文本不可见。 @A.G 调用 tableView.reloadData() 或 tableView.beginUpdates() ... tableView.endUpdates() @A.G 你似乎不知道 table view 动态单元格高度是如何工作的,estimatedRowHeight 64 -> 这个值是为了让 table view 知道滚动高度来调整滚动条的。它没有给表格单元格固定的单元格高度。 好的,但是如果我想将行高调整为64,我该怎么办? @A.G 您有两种选择,1-如果您想使用动态表格视图单元格高度功能,请提供单元格的父视图(将所有单元格子视图放在一个视图中)并给它固定大小的高度约束等于 64。 2- 使用该方法,就像你在做 heightForRowAt 委托方法一样。

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

出现删除按钮时重新计算自定义 UITableViewCell 的高度

UITableViewCell 子类,在代码中绘制,动画中的删除按钮

删除时的 UITableViewCell 不会移动 UITableViewCell 的 contentView

通过情节提要删除 UITableViewCell 中内容视图的填充

多行 UILabel 在 UITableViewCell 内的较小 iPhone 中截断或剪切字符串

重新加载时,UILabel 在 UITableViewCell 中不刷新