即使在 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 中内容视图的填充