6

当我在 Interface Builder 中移动控件并传递 UIView 时。无论如何阻止 IB 将控件嵌入 UIView 并使其成为树层次结构中 UIView 的子级。

BEFORE
+UIView
+UIButton
+UIView

如果我用鼠标移动 UIButton 并将其放在 UIView IB 上方,它将使其成为 UIView 的子项

AFTER
+UIView
  +UIButton
+UIView

无论如何要锁定底部视图。我经常将它们用作背景并为它们着色。

4

2 回答 2

3

Cmd您可以在不嵌入的情况下重新定位,方法是在拖动元素时按住不放。

编辑:这仅被确认适用于 Xcode 7。

于 2015-08-14T11:04:08.570 回答
0

我放弃并决定所有控件组都应该有一个父 UIView。可以不可见(clearColor的backgroundColor)

选择所有控件,然后选择编辑器菜单 > 嵌入视图。

之后,我们可以在它们自己的分组视图中安全地移动它们,而无需它们在层次结构中跳转。

Embed in View 的一个问题是当您使用标记和 viewWithTag 时:

如果您使用多个 VC 控制器和标签子视图构建视图,请确保标签 ID 在整个视图层次结构中是唯一的。

这是因为 viewWithTag: 只会返回与 id 匹配的第一个控件,并且似乎在向下移动一个级别以继续搜索之前搜索 ACROSS 视图层次结构。

因此,如果您选择 Editor menu > Embed in View,您将控件在层次结构中向下移动了一个步骤。因此,对 viewWithTag:999 的调用之前可能已经获取了您的控件,但现在可能会返回一个完全不同的控件。

它也可能崩溃!将结果从 UIView 转换为控件是很常见的,例如 UIImageView 然后调用控件上的方法。如果 viewWithTag 找到与预期不同的控件,它甚至可能不是 UIImageView,因此调用缺少的方法会引发异常。

基本上从不使用标签,因为您必须在 XIB 和代码中进行调试,并且不检查重复的 id。从 XIB 拖到 .h 并改为创建网点。

于 2013-01-10T11:36:45.007 回答