2015-04-18 126 views
8

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

enter image description here

现在,一切都在细胞似乎有,我不知道他们来自哪里额外的利润。

enter image description here

注意的是,这些观点的宽度没有在代码中的任何方式和正确的改变,并留下被约束如下:

enter image description here

另外请注意,我用的tableView.separatorStyle = .None。我添加这个事实是因为由于某种原因,在我的tableView中有一个默认分隔符,它似乎不会增加这些额外的边距。

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

编辑:

enter image description here

查看如何“相对于保证金”被选中:在尺寸检查的这个屏幕打一枪换一个领先的约束仔细 enter image description here

+0

我在更新之前在iOS 8上运行此应用程序,它看起来像第一个屏幕截图。 – ad121

+0

我不知道我还能补充什么。我只是在每边测试约束-16,并且它在屏幕上正确扩展,但我不知道为什么我的边际会被推迟(我不想在不知道原因的情况下使用bandaid修复) 。我打印了contentView,view,tableView和cell本身的宽度,它们在iphone 6上都是375,但蓝色块的宽度是359,并且在问题中给出了约束条件。 – ad121

+0

但是,为什么您首先要对边际进行限制?将它们设置为内容视图的实际边缘,然后更改边距不会影响到您。我意识到这并没有回答根本问题,但假设边界将是8,并将约束设置为-8来补偿是非常可怕的开始。 – matt

回答

19

看?那是你的问题。如果边距改变,您的左边缘会改变。 取消选中该菜单项,然后将常数更改为零。对于尾随限制也是如此,你的问题将会结束。

现在让我们来解决更深层的问题:改变了什么?你是完全正确的,有些事情。我相信他们修复了一个错误,并且你陷入了修复。记录显示单元的preservesSuperviewLayoutMarginstrue,表格的余量为0,16,0,16。即使在iOS 8.2上也是如此,所以iOS 8.2 应该有的有效利润率为16,但它们为8,犹如preservesSuperviewLayoutMarginsfalse。但是在iOS 8.3中,这个设置是正确的 - 结果是你已经观察到了。

因此,来解决这个问题的另一个方式会一直留下您的约束,因为他们,但设置每个单元的preservesSuperviewLayoutMarginsfalsecellForRowAtIndexPath:。这同样适用于在两个系统中使结果完全相同。好消息:它好像在iOS 9中恢复了这样的改变。因此,如果没有改变,你的单元格在iOS 9和iOS 8.2以及之前的版本中看起来一样。

+0

编辑来解释潜在的现象:你是绝对正确的,边际确实改变了!非常感谢你指出了这一点。 – matt

+0

..这是一些令人印象深刻的调试!必须查看我所有的表格视图单元的约束条件。这解决了所有这些问题。谢谢。 – nmdias

+0

你真的被苹果的新边际限制所困扰。当您最初使用控制拖动形成约束时,它将是基于边距的_un​​less您持有Option key_以获得无边距变体。因此,基于边际的约束是一种选择退出技术;你可以选择退出,但大多数人不知道这样做,并最终会使用它们,甚至没有意识到它。 – matt