我完全不明白为什么人们会抱怨“利润率会导致iOS 8之前任何产品的彻底崩溃”。
在xib文件或storyboard中设置相对于边距的约束不会让你的应用在iOS7上崩溃,也不会让你的iOS7设备上的UI发生变化,只要你不碰UIView。layoutmargin和UIView。代码中的preservessuperviewlayoutmargin属性。
iOS8中什么是margin
布局边距表示布局系统在布局子视图时可以使用的围绕UIView内部的填充-以确保在视图和子视图的边缘之间留有空隙。在这方面,它很像CSS中与块相关的padding属性。
默认情况下,UIView每边的布局边距为8点,这不能在Interface Builder中更改。不过,通过设置UIView。layoutmargin属性在代码中,这只在iOS8上可用,你可以调整这些值。
你可以使用编辑器> Canvas >显示布局矩形来显示页边距:
边距可以用来帮助布局视图和子视图。每个UIView默认都有页边距,但只有当你设置了与页边距相关的约束时,它们才会影响视图的位置。
如何使用边距
在Interface Builder中使用边距的唯一方法是在配置约束时检查相对于边距选项。这就是你如何指导你的约束使用边距而不是边时布局我的视图。
让我们看一看在视图和它的子视图之间设置主要约束的四种不同方法。对于我们回顾的每个约束,描述的第一个关联将是子视图的前导,第二个关联将是父视图的前导。您需要密切关注的是每个约束端“相对于边距”选项的勾选和取消勾选状态,因为这定义了约束是绑定到视图的边距还是绑定到视图的边缘。
第一项(取消勾选),第二项(勾选):在这种情况下,我们声明子视图的左边缘应该与父视图的左边缘对齐(如图所示)。
第一项(取消勾选),第二项(取消勾选):都使用边,而不是边距。在本例中,我们声明子视图的左边缘应该对齐于父视图的左边缘。
第一项(勾选),第二项(取消勾选):在本例中,我们声明子视图的左边缘应该与父视图的左边缘对齐。这种布局实际上使子视图与父视图重叠。
第一项(勾选),第二项(勾选)。这实际上与情况2有相同的效果,因为子视图和父视图都有相同的默认边距。我们声明子视图的左距应该对齐于父视图的左距。
边际距有什么好处
这个新功能(iOS8)只在你决定使用边距时才会影响UI开发。
通过使用页边距,您可以通过更改单个属性的值来调整与共享父视图具有共同关系的多个子视图的位置。这显然比用固定值设置所有相关的约束更有优势,因为如果你需要更新所有的间距,而不是逐个更改每个值,你可以通过更新父视图的边距来同时修改所有相关的位置,就像下面一行代码:
self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);
为了说明这个好处,在下面的例子中,所有子视图的左边缘都对齐到它们的父视图的左边缘。因此,改变superview的左边缘将同时影响所有子视图。