是否可以将约束从一个视图复制到另一个视图?
Is it possible to copy constraints from one view to another?
假设我使用 Interface Builder 在具有自动布局的 Storyboard 中创建 UI。我可以将一些约束从一个视图复制或移动到另一个视图吗?
如果您正在使用界面生成器,如果您使用 cmd-c 或 edit/copy,一些约束将被自动复制:包括复制视图层次结构的约束。否则,不,你不能。如果要保留约束,请复制整个视图。
这是我获取所有约束的技巧:我在主视图中有一个小视图,我想将其复制到另一个视图控制器,为了做到这一点,我将整个主视图复制到新的视图控制器主视图。然后我将我的小视图(在侧面层次结构上)拖到我的新控制器的主视图中,然后删除了我不需要的旧主视图。这样您就可以在小视图中保留项目的所有约束。
希望对您有所帮助:)
如果您了解并了解 .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>
假设我使用 Interface Builder 在具有自动布局的 Storyboard 中创建 UI。我可以将一些约束从一个视图复制或移动到另一个视图吗?
如果您正在使用界面生成器,如果您使用 cmd-c 或 edit/copy,一些约束将被自动复制:包括复制视图层次结构的约束。否则,不,你不能。如果要保留约束,请复制整个视图。
这是我获取所有约束的技巧:我在主视图中有一个小视图,我想将其复制到另一个视图控制器,为了做到这一点,我将整个主视图复制到新的视图控制器主视图。然后我将我的小视图(在侧面层次结构上)拖到我的新控制器的主视图中,然后删除了我不需要的旧主视图。这样您就可以在小视图中保留项目的所有约束。
希望对您有所帮助:)
如果您了解并了解 .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>