【问题标题】:Change dynamic Height Constraint of Element inside UITableViewCell更改 UITableViewCell 内 Element 的动态高度约束
【发布时间】:2016-10-27 23:55:55
【问题描述】:

我在UITableViewCell 中有一个UITextView。 它不可编辑,从JSON 解析加载到textView 的数据,我使用UITextView 而不是UILabel,因为我需要NSAttributed Strings 上的一些点击手势,这是UILabel 无法完成的。

对于一行,我想在 UITextView 上显示文本,我需要它可见,具有恒定 40 的高度约束。

对于我不想显示文本的行,我需要将其隐藏起来而不显示高度,因此我将高度约束设为 0 常量。

问题是,虽然在这种情况下UITextView 可以隐藏,但它的高度仍然存在。

我对单元格高度使用自动尺寸。

尝试了很多我在 stackoverflow 上找到的方法,但不幸的是没有解决我的问题。

请注意,不必为此 UITextView 指定特定高度。我只是希望它取决于我收到的数据,要么在没有高度的情况下可见,要么在没有任何高度的情况下隐藏。

【问题讨论】:

  • 发布 issue 截图。尝试谷歌“自我调整大小的单元格 uitableview”
  • 刚刚上传了一张简单的图片,说明我的意思,谢谢
  • 您可以在tableView 上使用estimatedRowHeight 属性并设置值UITableViewAutomaticDimension
  • kcpac 我已经试过了。问题是无论我做什么,Cell 都会“考虑” UITextView 处于活动状态。也尝试添加和删除高度约束,没有任何改变。
  • 您可以尝试将numberOfLines 设置为0 并从标签中移除高度限制。

标签: ios swift uitableview


【解决方案1】:

隐藏子视图不会将其从视图层次结构或布局计算中移除。

如果您想隐藏UITextView 并正确更新布局,我可以想到两个选项。

如果您的目标 iOS >= 9,您应该使用 UIStackView。当您需要隐藏其中一个子视图时,它会自动调整其布局。

否则,您将不得不删除并创建约束,以便单元格的底部被约束到红色视图(在您的图像中)而不是 UITextView

【讨论】:

  • 尝试了 UIStackView,但不幸的是没有任何改变。第二个解决方案不能那样做,因为我想隐藏的 UITextView 下面有更多元素。说到布局更新,我尝试过 setNeedsDisplay()、layoutSubviews()、tableView.beginUpdates() 等。我错过了什么?
  • 在你的问题中,当你试图隐藏 UITextView 时不清楚。如果您在cellForRowAtIndexPath 中执行此操作,我的答案有效,但如果您在某个地方执行此操作,它可能无法正常工作。也许用更多细节更新您的问题。在添加 UIStackView 之前,我过去使用了大约 10 个视图的第二种解决方案。最终不会有那么多代码。
猜你喜欢
  • 2019-05-07
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
相关资源
最近更新 更多