我根本不明白为什么人们会抱怨“ 保证金会导致iOS 8之前的所有版本完全崩溃 ”。
在厦门国际银行文件或情节串连图板设置你的约束相对于保证金DOES NOT作出iOS7您的应用程序崩溃,并且它DOES NOT使您iOS7设备上的UI差别都不是,只要你不碰UIView.layoutMargins
和UIView.preservesSuperviewLayoutMargins
性能在你的代码。
什么是iOS8中的保证金
布局利润代表围绕填充内部的UIView
该布局当子视图的布局系统可以使用-确保的间隙的视图和一个子视图的边缘之间留下。在这方面,它非常类似于与CSS中的块关联的padding属性。

默认情况下,a的UIView
每侧布局边距为8点,并且不能在Interface Builder中更改。但是,通过UIView.layoutMargins
在代码中设置属性(仅在iOS8上可用),您可以调整这些值。
您可以通过“ 编辑器”>“画布”>“显示布局矩形”来显示IB以显示边距:

边距可用于帮助布局视图和子视图。UIView
默认情况下,每个都有边距,但是它们仅在您设置与边距相关的约束时才影响视图放置。
如何使用保证金
在Interface Builder中使用边距的唯一方法是在配置约束时检查“ 相对于边距”选项。这是在布局视图时将约束指示为使用边距而不是边缘的方式。

让我们看一下在视图及其子视图之间设置领先约束的四种不同方式。对于每个约束,我们审查所描述的第一个关联将是子视图的领导,而第二个将是superview的领导。您要密切注意的是每个约束端的“ 相对于边距”选项的选中和取消选中状态,因为这定义了约束是绑定到视图的边距还是边缘。
- 第一项(取消选中),第二项(选中):在这种情况下,我们声明子视图的左边缘应与超级视图的左边缘对齐(如下图所示)。

- 第一项(取消选中),第二项(取消选中):两者都使用edge,而不使用margin。在这种情况下,我们声明子视图的左边缘应与超级视图的左边缘对齐。

- 第一项(选中),第二项(取消选中):在这种情况下,我们声明子视图的左边界应与超级视图的左边缘对齐。这种布局实际上使子视图与超级视图重叠。

- 第一项(检查),第二项(检查)。实际上,这与情况2具有相同的效果,因为子视图和超级视图都具有相同的默认边距。我们声明子视图的左边缘应与超级视图的左边缘对齐。

保证金有什么好处
如果您决定使用边距,则此新功能(iOS8)仅影响UI开发。
通过使用边距,您可以通过更改单个属性的值来调整与共享超级视图具有共同关系的多个子视图的位置。这显然是将所有关联约束设置为固定值的一种成功方法,因为如果您需要更新所有间距,而不是一个一个地更改每个值,则可以通过单行更新超级视图的边距来同时修改所有相关的位置像这样的代码:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
为了说明这种好处,在以下情况下,所有子视图的左边缘都与其父视图的左边缘对齐。因此,更改超级视图的左边界将同时影响所有子视图。
