Предположим, я использую 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
Использование функции "Встроить в вид" сохранит большинство ограничений.
Внедрение в поле зрения - это вторая иконка в меню инструментов в правом нижнем углу конструктора интерфейса.