XCode8:UICollectionView edge-to-edge,在一个 Trait Variation(大小 Class)中编辑约束会破坏其他 Trait Variations

XCode8: UICollectionView edge-to-edge, Editing constraints in One Trait Variation (Size Class) breaks other Trait Variations

我在使用 Xcode 界面生成器时遇到了一个令人恼火的问题。我有一个情节提要,其中一个视图控制器有一个 UICollectionView,它与视图控制器的根视图相邻。根视图对于 UICollectionView 的前导和尾随 space 具有 -16 和 -16 的后代约束。

当我切换到另一个尺寸 class(或现在称为特征变化)时,前导和尾随边距变为 -20、-20。如果我将它们调整为边到边,那么另一个特征变异就会在每边插入 4 个像素。因此,编辑一个变体中的约束会搞砸另一个变体,因此我所有的内部计算逻辑都对单元格关闭了。

所以我不能同时满足多个特征变体的约束,并且我的 UICollectionView 只是边到边,周围没有任何填充。

我尝试重新制作所有约束。同样的问题。

我尝试在故事板本身上关闭 Trait Variations。同样的问题。

编辑:还尝试添加一个 "Intermediary View"(也是边到边)并将我的 UICollectionView 放在其中。没有区别。

我注意到每个设备因素的负插入量必须不同。有些是 -16 -16,有些是 -20、-20,有些是 iPad -8、-8。因此,既然这些是静态值,那么如何才能可靠地将滚动视图边缘嵌入到边缘,而无需在运行时以编程方式摆弄约束?

我可以修复一个设备的屏幕尺寸,但它会破坏其他屏幕尺寸。

此外,我实际上并不想使用大小 classes,但即使我关闭大小 classes,我仍然没有一个统一的视图来编辑约束在一个地方。所以这有效地将我必须做的工作增加了 6 倍。这已经花费了我大量的时间。

有什么建议吗?

我找到了一个便宜又简单的解决方案。我的问题是:我的 Leading 和 Trailing 约束是针对 Margin,而不是直接针对 superview。边距是大小 类 的不同之处。所以我修改了我的 2 个约束:前导和尾随,禁用了每个约束的 "Relative to Margin" 选项。此处说明:

现在我在每个屏幕尺寸上都得到了一致的行为(集合视图周围没有边距)。