Предположим, что я использую Interface Builder для создания пользовательского интерфейса в раскадровке с автоматической компоновкой. Могу ли я скопировать или переместить некоторые ограничения из одного вида в другое?Можно ли скопировать ограничения с одного вида на другой?
ответ
Если вы используете конструктор интерфейса, некоторые ограничения будут автоматически скопированы, если вы используете cmd-c или редактируете/копируете: те, которые включают иерархию просмотра копий. В противном случае нет, вы не можете. Скопируйте весь вид, если вы хотите сохранить ограничения.
Спасибо за ответ, но мне нужно изменить тип вида в построителе интерфейса. Вот почему я спрашиваю, как копировать ограничения. Копирование представления не поможет в моей ситуации. – kelin
Это другой вопрос, см. Мой ответ здесь, пожалуйста: http: // stackoverflow.com/a/28626319/1758701 – iOSdev
Я изменил тип вида, отредактировав исходный код раскадровки. – kelin
Вот мой хак, чтобы получить ВСЕ ограничения для копирования: у меня есть небольшой вид в моем основном представлении, который я хочу скопировать на другой контроллер представления, чтобы сделать это. Я копирую весь основной вид в новый вид главного контроллера. Затем я перетаскиваю свой маленький вид (по боковой иерархии) в основной вид моего нового контроллера, а затем просто удаляю старый основной вид, который мне не нужен. Таким образом, вы сохраняете все ограничения для элементов в небольшом представлении.
Надеется, что это помогает :)
Вы можете, если вы понимаете, и узнать, как XML файлов работ .xib
. Я очень привык к ним, и поэтому мне удалось переместить представление с его ограничениями в другое представление.
Я попытаюсь объяснить, шаг за шагом:
- Создать выход для него:
myView
- Щелкните правой кнопкой мыши файл
.xib
>Open As
>Source Code
или открыть его в другом редакторе (например,Sublime Text
) Поиск
myView
и вы найдете что-то вроде:<outlet property="myView" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
и скопировать значение атрибута
destination
Поиск скопированного идентификатора (
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>
Продолжить поиск для скопированного идентификатора и вы будете плавник d некоторые ограничения, которые имеют это нравится:
<constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/>
Вы должны переместить это в
constraints
тег наименьшего общего предка обеих superviews (старый и новый):<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>
Отличный ответ! Я вижу, что вы ищете просмотр по 'id', и что, если я хочу * скопировать * этот вид, а не * вырезать * и вставить? Я полагаю, что 'id' должен быть уникальным. Должно ли оно быть создано некоторыми конкретными правилами, или этого было бы достаточно, чтобы случайно изменить его? – kelin
Да, 'id' должен быть уникальным для файла' .xib', поэтому он не может быть одинаковым даже для 'view' и' constraint'. Я не могу гарантировать вас, но из того, что я видел, это абсолютно случайный, но чтобы быть в безопасности, держите его в том же формате: «3 символа - 2 символа - 3 символа». Вы также можете добавить новое представление, обнаружить его, либо позиционируя его в верхней части иерархии представлений, чтобы вам было проще, либо путем размещения файла перед его добавлением, скопировать его «id», удалить представление и использовать его 'id'. –
Также, пожалуйста, примите этот ответ, если это вам помогло, так как текущий не достигает того, что вы просили. –
Во время работы или с использованием IB? Какие ограничения? Пожалуйста, уточните, что слишком много вопросительных знаков, которые помогут вам. Каково ваше дело? – kedzia
Я уточнил свой вопрос. – kelin
хорошо ... как насчет вас попробуете? – LinusGeffarth