【发布时间】:2014-11-14 19:54:12
【问题描述】:
在我正在创建的这个 iOS 8 应用程序中,我有一个表格视图,我需要它们自行调整大小。我使用自动布局实现了它并且它工作。几乎。这是它现在的样子。
一个单元格内有 3 个标签。具有 lorem ipsum 文本的主标签。具有数字字符串的字幕(这是两个单独的标签。可能会因为它们具有相同的颜色而令人困惑。)然后是带有黑色小文本的第三个标签。
第一个标签正确地调整了自己的大小,没有问题,第二个标签相应地上下移动。但问题在于第三个小标签。如您所见,它不会自行调整大小以适应所有文本。
现在发生了一件奇怪的事情。我把它变成横向的,就是这样。
由于有空间,标签显示了它应该显示的整个文本。美好的。然后我把它转回纵向。
现在小标签已调整大小以适应其所有文本,但它溢出了单元格边界。我试着让细胞变大,但没有用。由于这是自调整大小的单元格,我认为这甚至不是正确的方法。
我的自动布局约束也没有收到任何错误甚至警告。
我已经在viewDidLoad()方法中设置了这两行代码。
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
谁能告诉我我在这里做错了什么?
由于仅通过查看图像很难回答,并且除了上述 sn-p 之外我没有更多代码可以发布,因此我上传了一个可运行的 Xcode 项目来演示问题here。 (有2个自定义单元格。基本上它是相同的单元格,只是第二个增加了高度。)
我一直在摆弄自动布局约束,但我似乎无法让它工作。任何帮助将不胜感激。
谢谢。
更新:
在tutorial 的帮助下,我找到了一些有用的建议。根据它,每个子视图都应该有约束其所有侧面的约束,并且应该有从上到下的约束,这有助于自动布局计算单元格的高度。在我原来的帖子中,每个标签之间都有垂直空间,所以我认为这就是自动布局无法计算正确高度的原因。
所以我做了一些改变。
- 我将标签之间的垂直空间减少到 0,并设置了顶部和中间标签以及中间和底部标签之间的垂直空间限制。
- 我在顶部标签中添加了前导、顶部和尾部约束。
- 前导和尾随到中间标签。
- 前导、底部、尾随到底部标签。
现在这是另一个奇怪的部分。当我第一次运行它时,底部标签裁剪问题仍然存在。
但如果我将设备旋转为横向并将其转回纵向,则所有单元格的大小都会正确调整以适合两个标签!
仍然无法弄清楚为什么一开始没有发生这种情况。更新后的 Xcode 项目是here。
【问题讨论】:
-
表格发现在视图出现之前估计标签中文本的确切高度太困难了,但它的表现都很好。我发现如果你将 tableView.estimatedRowHeight = 100 移动到 viewDidAppear 那么这解决了你看到的问题
-
... 或者更确切地说,表格似乎使用估计的高度作为借口,在首次加载表格时不进行精确计算。但是,如果按照描述的方式移动了估计行高度,则可以解决您所看到的问题。完全删除它会在旋转时产生重绘问题。
-
@GoodbyeStackOverflow 我按照你的建议做了,但我遇到了一些问题。 This is how it looks when you run it 和 when you scroll down。我也将同样的方法应用于我的第二个示例和this is the result。前 3 个单元格看起来不错,但请注意,在最后一个单元格中它搞砸了。
-
@Isuru XCode 项目不存在。你能再上传一次吗?我也在做同样的事情。
-
@Hiren 抱歉,我没有那个项目了。这只是一个临时项目。
标签: ios uitableview swift autolayout ios8