gpt4 book ai didi

ios - Xcode 6 中 Storyboard 中的 "Constrain to margin"是什么

转载 作者:可可西里 更新时间:2023-11-01 06:14:10 24 4
gpt4 key购买 nike

我正在使用自动布局和约束,发现 Xcode 6 中有一个 Constrain to margins 选项,它在 Xcode 5 中不存在,默认情况下处于选中状态。

我创建了一个测试项目,然后我在 ViewController 上添加了一个 UITableView,并将框架设置为与 View 相同的大小并添加了约束

Xcode 6你可以在这里看到,即使 tableview 与 View 具有相同的框架,Xcode 建议添加 -16 作为约束,而 Xcode 5 会建议添加间距 0。

With Constrain to margin checked

现在,当您取消选中“Constrain to margin”选项时,它的行为与 Xcode 5 相同,并建议添加 0 作为约束

With Constrain to margin UnChecked

此外,我发现一旦我使用 Constrain 添加约束以检查边距,我就无法再在 Xcode 5 中打开 Storyboard 文件,因此这绝对是 Xcode 6 中的新功能

希望我能够正确解释我的问题。我想了解“Constrain to margin”的实际作用以及我应该和不应该使用它的时间。如果这是非常简单明了的事情,我深表歉意。

编辑

我在 discussion here 中找到了一些关于布局边距的信息,不知是否与此有关。

最佳答案

我完全不明白为什么人们提示“边距会导致 iOS 8 之前的任何东西彻底崩溃。

Setting your constraints relative to margin in a xib file or storyboard DOES NOT make your app crash on iOS7, and it DOES NOT make a UI difference on your iOS7 device neither, as long as you don't touch the UIView.layoutMargins and UIView.preservesSuperviewLayoutMargins properties in your code.

iOS8 中的边距是什么

布局边距表示 UIViewinterior 周围的填充,布局系统在布置 subview 时可以使用它 - 以确保在 View 和 subview 。在这方面,它非常类似于 CSS 中与 block 关联的填充属性。

enter image description here

默认情况下,UIView 每边的布局边距为 8 点,这在 Interface Builder 中无法更改。但是,通过在代码中设置 UIView.layoutMargins 属性(仅适用于 iOS8),您可以调整这些值。

You can get IB to display the margins with Editor > Canvas > Show Layout Rectangles:enter image description here

边距可用于帮助布局 View 和 subview 。默认情况下,每个 UIView 都带有边距,但它们只会在您设置与边距相关的约束时影响 View 放置。

如何使用边距

在 Interface Builder 中使用边距的唯一方法是在配置约束时选中Relative to margin 选项。这就是您如何将约束指向在布置我的 View 时使用边距而不是边缘。

enter image description here

让我们来看看在 View 及其 subview 之间设置前导约束的四种不同方法。对于每个约束,我们检查描述的第一个关联将是 subview 的前导第二个将是父 View 的前导。您要密切注意的是每个约束端的Relative to margin选项的选中和取消选中状态,因为它定义了约束是绑定(bind)到 View 的边距还是边缘。

  1. 第一项(取消选中),第二项(选中):在这种情况下,我们声明 subview 的左边缘应与父 View 的左边距对齐(如此图所示)。

enter image description here

  1. 第一项(取消选中),第二项(取消选中):都使用边缘,不是边距。在这种情况下,我们声明 subview 的左边缘应与父 View 的左边缘对齐。

enter image description here

  1. 第一项(选中),第二项(取消选中):在这种情况下,我们声明 subview 的左边距应与父 View 的左边缘对齐。这种布局实际上使 subview 与父 View 重叠。

enter image description here

  1. 第一项(检查),第二项(检查)。这实际上与案例 2 具有相同的效果,因为 subview 和父 View 都具有相同的默认边距。我们声明 subview 的左边距应与父 View 的左边距对齐。

enter image description here

边距有什么好处

如果您决定使用边距,此新功能 (iOS8) 只会影响 UI 开发。

通过使用边距,您可以通过更改单个属性的值来调整与共享父 View 共享公共(public)关系的多个 subview 的位置。这明显胜过使用固定值设置所有关联的约束,因为如果您需要更新所有间距,而不是一个一个地更改每个值,您可以通过用一行更新父 View 的边距来同时修改所有相关的位置像这样的代码:

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

为了说明这个好处,在下面的例子中,所有 subview 的左边缘都与其父 View 的左边距对齐。因此,更改父 View 的左边距将同时影响所有 subview 。

enter image description here

关于ios - Xcode 6 中 Storyboard 中的 "Constrain to margin"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32324767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com