假设我使用Interface Builder在Storyboard中使用自动布局创建用户界面。我可以将一些约束条件从一个视图复制或移动到另一个视图吗?
假设我使用Interface Builder在Storyboard中使用自动布局创建用户界面。我可以将一些约束条件从一个视图复制或移动到另一个视图吗?
.xib
文件的 XML 工作原理来实现。我习惯于使用它们,因此能够将带有约束条件的视图移动到另一个视图中。myView
.xib
文件 > Open As
> Source Code
或在其他编辑器(如 Sublime Text
)中打开它搜索 myView
,你会找到类似以下内容的代码:
<outlet property="myView" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
复制destination
属性的值
搜索已复制的 id (i5M-Pr-FkT
),其中一个结果将是一个view
标签:
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
将整个 view
标签复制并粘贴到所需视图的 subviews
标签中: <view contentMode="scaleToFill" id="Ovp-8Y-qHZ"> <!-- 2 -->
<subviews>
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
</subviews>
</view>
继续搜索复制的id,你会发现一些具有该id的限制条件,例如: <constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/>
你需要将此代码移动到两个父视图(旧的和新的)的最近公共祖先的 constraints
标签中: <view contentMode="scaleToFill" id="rK2-sE-P0d"> <!-- 3 -->
<subviews>
<view contentMode="scaleToFill" id="Ovp-8Y-qHZ"> <!-- 2 -->
<subviews>
<view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 -->
...
</view>
</subviews>
</view>
</subviews>
<constraints>
<constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/>
</constraints>
</view>
id
搜索视图,如果我想复制该视图,而不是剪切和粘贴,该怎么办?我想id
应该是唯一的。它应该由某些特定规则生成,还是随机修改就足够了? - kelin.xib
文件中的id
应该是唯一的,因此即使对于view
和constraint
也不能相同。虽然我无法保证,但从我所看到的来看,它是完全随机的,但为了安全起见,请将其保留在相同格式中:3 chars - 2 chars - 3 chars
。您还可以添加一个新的view,通过将其定位在视图层次结构的顶部来更轻松地找到它,或者在添加之前分阶段文件,复制其id
,删除该视图并使用该id
来检测它。 - Iulian OnofreiXML
,我认为它们包含多个xib结构。 - Iulian Onofrei