Можно ли скопировать ограничения из одного вида в другое?
Предположим, я использую Interface Builder для создания пользовательского интерфейса в раскадровке с помощью автоматического макета. Можно ли скопировать или переместить некоторые ограничения из одного вида в другое?
Ответы
Ответ 1
Если вы используете построитель интерфейсов, некоторые ограничения будут автоматически скопированы, если вы используете cmd-c или редактируете/копируете: те, которые включают иерархию просмотра копий. В противном случае нет, вы не можете. Скопируйте весь вид, если вы хотите сохранить ограничения.
Ответ 2
Здесь мой хак, чтобы получить ВСЕ ограничения для копирования: у меня есть небольшой вид в моем основном представлении, который я хочу скопировать на другой контроллер представления, чтобы сделать это, я копирую по всему основному виду в новое представление главного контроллера. Затем я перетаскиваю свой маленький вид (по боковой иерархии) в основной вид моего нового контроллера, а затем просто удаляю старый основной вид, который мне не нужен. Таким образом, вы сохраняете все ограничения для элементов в небольшом представлении.
Надеюсь, что это поможет:)
Ответ 3
Вы можете, если вы понимаете и узнаете, как работает XML файлов .xib
. Я довольно привык к ним, и поэтому мне удалось переместить представление с его ограничениями в другое представление.
Я попытаюсь объяснить это шаг за шагом:
- Создайте для него выход:
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>
-
Продолжайте поиск скопированного идентификатора, и вы найдете некоторые ограничения, которые у него есть:
<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>
Ответ 4
Использование функции "Встроить в вид" сохранит большинство ограничений.
Внедрение в поле зрения - это вторая иконка в меню инструментов в правом нижнем углу конструктора интерфейса.
![enter image description here]()