如何防止Interface Builder在子视图内容周围添加20pt填充?

时间:2013-03-13 12:25:34

标签: ios xcode interface-builder

IB, stop adding that padding!

看到20px(相当于)填充? IB会在两种情况下自动执行此操作,当您点击Cmd + =以自动调整超级视图以适合子视图内容时,以及选择Editor > Embed In > UIView, UIScrollView etc.时。

后者尤其令人烦恼,因为它需要一步一步节省时间并将其转换为重新定位麻烦,这比手动操作稍微好一点,并且当您将它们拖动到一个子视图时丢失所有子视图的相对位置层次结构中的不同位置。

同样使用Embed In选项,IB将新的超级视图包装的位置移动(-20,-20),就好像这样做更好......

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

3 个答案:

答案 0 :(得分:37)

我终于想出了如何做到这一点,与这个答案有关:

Group views in Interface Builder

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

    在Xcode 4.5中测试。

    P.S。当您希望有侧边栏并同时支持3.5“和4”显示时,此技术尤其有用。您可以为侧边栏和主视图指定相应的自动调整大小,然后根据它们缩放子视图。我无法获得GLKit视图以尊重自动调整规则,因此我设置了普通视图并在其中嵌入了GLKKit视图并启用了所有红色自动调整条:

    GLKView nested subview frame size and bounds size incorrect

答案 1 :(得分:4)

真是个好消息!最终,可以将视图嵌入UIView 中,而无需进行任何调整,这要归功于Xcode 10

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

截至目前,他们还没有对UIScrollView做同样的事情……

答案 2 :(得分:0)

至于现在,不可能做到这一点。但是在Xcode 9上,这对我来说最有效。请注意,这样您将放弃嵌入顶视图的约束。因此,将一个视图嵌入到另一个视图中:

  1. 在与要嵌入的视图相同的级别上创建另一个空白视图。
  2. 正确定位新视图并从中添加约束 上海华。我认为在大多数情况下你想复制相同的东西 从现有视图到超级视图的约束。
  3. 然后,选择需要嵌入的视图并将其拖放到下面 新观点。现在,您将视图嵌入到新视图中。 您还需要从嵌入视图中添加0个边缘约束 到了新观点。
  4. 那就是它。