UITableView分隔符插入不准确,或者我正在查找其他内容



这似乎是一个非常基本的操作,已经变得过于复杂。

我有一个带有单元格的uitableview,我正在尝试使用heightForRowAtIndexPath调整其大小。我需要根据单元格所包含的文本调整单元格大小,因此我使用属性字符串boundingRectWithSize,传入表的宽度和窗口的高度,并使用退出队列的单元格和UsesLineFragmentOrigin中的正确字体。

在许多情况下,这会截断最后一行文本,我认为这是由于单元格的内容视图和表视图边缘之间的偏移,因此当我给boundingRectWithSize表的宽度时,它会错误计算高度。

当我打开视图调试"显示视图框架"时,我甚至可以看到这一点。内容视图的左侧和右侧有相等的偏移。

但是,我不知道如何在方法heightForRowAtIndexPath中访问这个偏移量。从视图调试中,我知道表的宽度和contentview的宽度之差是40,但我不想硬编码这个值。我对它所在位置的最佳猜测是UITableView的一个名为"separatorInset"的属性,它是一个具有"左"、"右"、"上"one_answers"下"维度的edgeInset。然而,当我检查该属性时,除了"left"为20之外,所有维度都为零。

由于我知道差值是40,如果我将宽度减去"left"*2传递到boundingRectWithSize中,那么我的所有测试字符串的大小都是正确的。

然而,这让我很困扰,因为我希望通过的是宽度-"左"-"右",而仅仅使用左*2或多或少就相当于硬编码40。

我是不是错过了一个不动产,它会告诉我左右偏移量是多少,或者"separatorInsets"被窃听了,或者"left"right"up"down"是否意味着明显之外的其他东西?谢谢

我觉得自己很愚蠢,但我想找的术语是"边际"。我想找一种叫做偏移的东西,但用一般的术语来说,我想的是边际。

我最初可能会考虑这个问题,但后来在查看UITableView的文档时,我没有看到任何包含该词的属性。

然而,UIView当然有一个名为"layoutMargins"的属性,这是我找不到的。

在考虑了表视图、表视图单元格甚至单元格的内容视图是否控制了这一点之后,我相信很容易混淆,所以对于任何想知道的人来说,这类事情是由UITableView上的属性"layoutMargins"控制的。

然而,我仍然有点困惑,因为UITableViewCell有一个名为preservesSuperviewLayoutMargins的属性(也来自UIView),它应该默认为NO。在这种情况下,单元格的布局应该覆盖表视图的布局。

似乎对于UITableViewCell,它默认为YES。我想应该记在心里。

最新更新