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