8

XCode 6.3 / Swift 1.2 是否为 UITableViewCell 的 contentView 添加了额外的边距?在更新之前,我有一个自定义 UIView,它在我的单元格中一直延伸到整个屏幕。例子:

在此处输入图像描述

现在,单元格中的所有内容似乎都有额外的边距,我不知道它们来自哪里。

在此处输入图像描述

请注意,这些视图的宽度在代码中不会以任何方式改变,并且左右受到如下约束:

在此处输入图像描述

另请注意,我正在使用tableView.separatorStyle = .None. 我添加了这个事实,因为出于某种原因,在我tableView的一个具有默认分隔符的 s 中,它似乎没有添加这些额外的边距。

有谁知道他们是否在 XCode 6.3 中做了一些奇怪的改变?此行为在更新后直接发生。

编辑: 在此处输入图像描述

4

1 回答 1

19

仔细查看大小检查器的屏幕截图,了解主要约束:

在此处输入图像描述

看看如何检查“相对于边距”?那是你的问题。如果边距发生变化,您的左边缘也会发生变化。取消选中该菜单项,然后将常量更改为零。对尾随约束也这样做,你的问题就会结束。

现在让我们解决更深层次的问题:发生了什么变化?你是绝对正确的,确实发生了一些事情。我相信他们修复了一个错误,而你被修复了。日志记录显示单元格preservesSuperviewLayoutMarginstrue,表格的边距是0,16,0,16. 即使在 iOS 8.2 上也是如此,因此 iOS 8.2 上的有效边距应该是 16。但它们是 8,好像preservesSuperviewLayoutMarginsfalse. 但是在 iOS 8.3 中,这个设置被正确地遵守了——结果你已经观察到了。

因此,解决问题的另一种方法是将约束保持原样,但将每个单元格设置preservesSuperviewLayoutMarginsfalsein cellForRowAtIndexPath:。这同样适用于使两个系统中的结果相同。

编辑好消息:看起来这种更改在 iOS 9 中已恢复。因此,如果不进行更改,您的单元格在 iOS 9 中看起来与在 iOS 8.2 及之前的版本中相同。

于 2015-04-18T03:05:24.110 回答