30

IB,停止添加填充!

看到 20 像素(而不是 pt)的填充吗?IB 在两种情况下自动执行此操作,当您点击Cmd + =自动调整超级视图以适应子视图内容时,以及当您选择Editor > Embed In > UIView, UIScrollView etc..

后者特别烦人,因为它需要一步一步节省时间,并将其变成重新定位的麻烦,仅比手动操作好一点,并且当您将所有子视图拖到不同位置时会丢失它们的相对位置层次结构。

同样通过该Embed In选项,IB 将新的 superview 包装器的位置移动 (-20, -20),就好像这使它变得更好......

我在这里错过了什么吗?有没有办法防止这种填充?

4

4 回答 4

37

我终于想出了与此答案相关的方法:

Interface Builder 中的组视图

  1. 选择您希望嵌入的所有视图(通过 shift 或命令单击它们)。
  2. 编辑器->嵌入->查看。这将创建一个带有多余 20 像素填充的视图“A”。
  3. 使用您想要的实际边界创建一个新视图“B”(因此所有边都比“A”小 20 个像素)。
  4. 将旧的容器视图“A”拖到新的容器视图“B”中(Xcode 会在“B”中为您居中,保留所有子元素的当前位置)。
  5. 单击旧容器视图“A”并转到编辑器->取消嵌入。

现在您的子元素在视图“B”中正确定位,并且没有 20 像素填充。

在 Xcode 4.5 中测试。

PS 当您希望拥有侧边栏并同时支持 3.5" 和 4" 显示器时,此技术特别有用。您可以为侧边栏和主视图提供适当的自动调整大小,然后相对于它们缩放子视图。我无法让 GLKit 视图遵守自动调整大小规则,因此我设置了普通视图并将 GLKKit 视图嵌入其中,并启用了所有红色的自动调整大小条:

GLKView 嵌套子视图帧大小和边界大小不正确

于 2013-05-31T17:35:18.307 回答
6

真是个好消息!UIView 多亏了 Xcode 10,这终于可以在没有任何调整的情况下嵌入视图!

只需使用新的View Without Insets子菜单。

到目前为止,他们还没有这样做UIScrollView……</p>

于 2018-10-30T15:27:24.083 回答
0

至少在 Xcode 7.2 中,您所要做的就是为 Container View 提供以下约束

Trailing Space to Superview = -20

Leading Space to Superview = -20
于 2015-12-20T19:31:41.557 回答
0

就目前而言,不可能一帆风顺。但这是在 Xcode 9 上对我最有效的方法。请注意,这样您将放松对嵌入的顶视图的约束。因此,要将一个视图嵌入到另一个视图中:

  1. 在与您要嵌入的视图相同的级别上创建另一个空白视图。
  2. 正确定位新视图并将其约束添加到父视图。我认为在大多数情况下,您希望将与现有视图相同的约束复制到父视图。
  3. 然后,选择需要嵌入的视图并将其拖到新视图下。现在您将视图嵌入到新视图中。您还需要将 0 边缘约束从嵌入视图添加到新视图。

就是这样。

于 2017-10-04T13:34:07.737 回答