假设我使用Interface Builder在故事板中使用自动布局创建UI。我可以将一些约束从一个视图复制或移动到另一个视图吗?
答案 0 :(得分:15)
这是我的黑客获取要复制的所有约束:我在主视图中有一个小视图,我想要复制到另一个视图控制器,为了做到这一点,我复制整个主视图进入新视图控制器主视图。然后我将我的小视图(在侧面层次结构上)拖到我的新控制器的主视图中,然后删除了我不需要的旧主视图。这样,您可以在小视图中保留项目的所有约束。
希望这会有所帮助:)
答案 1 :(得分:14)
如果使用界面构建器,则在使用cmd-c或编辑/复制时会自动复制某些约束:包含复制视图层次结构的约束。否则,不,你不能。如果要保留约束,请复制整个视图。
答案 2 :(得分:11)
如果您了解并了解.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,您会发现一些类似的限制:
<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>
答案 3 :(得分:-1)