2015-02-20 8 views
24

Предположим, что я использую Interface Builder для создания пользовательского интерфейса в раскадровке с автоматической компоновкой. Могу ли я скопировать или переместить некоторые ограничения из одного вида в другое?Можно ли скопировать ограничения с одного вида на другой?

+0

Во время работы или с использованием IB? Какие ограничения? Пожалуйста, уточните, что слишком много вопросительных знаков, которые помогут вам. Каково ваше дело? – kedzia

+0

Я уточнил свой вопрос. – kelin

+0

хорошо ... как насчет вас попробуете? – LinusGeffarth

ответ

10

Если вы используете конструктор интерфейса, некоторые ограничения будут автоматически скопированы, если вы используете cmd-c или редактируете/копируете: те, которые включают иерархию просмотра копий. В противном случае нет, вы не можете. Скопируйте весь вид, если вы хотите сохранить ограничения.

+0

Спасибо за ответ, но мне нужно изменить тип вида в построителе интерфейса. Вот почему я спрашиваю, как копировать ограничения. Копирование представления не поможет в моей ситуации. – kelin

+1

Это другой вопрос, см. Мой ответ здесь, пожалуйста: http: // stackoverflow.com/a/28626319/1758701 – iOSdev

+1

Я изменил тип вида, отредактировав исходный код раскадровки. – kelin

12

Вот мой хак, чтобы получить ВСЕ ограничения для копирования: у меня есть небольшой вид в моем основном представлении, который я хочу скопировать на другой контроллер представления, чтобы сделать это. Я копирую весь основной вид в новый вид главного контроллера. Затем я перетаскиваю свой маленький вид (по боковой иерархии) в основной вид моего нового контроллера, а затем просто удаляю старый основной вид, который мне не нужен. Таким образом, вы сохраняете все ограничения для элементов в небольшом представлении.

Надеется, что это помогает :)

6

Вы можете, если вы понимаете, и узнать, как XML файлов работ .xib. Я очень привык к ним, и поэтому мне удалось переместить представление с его ограничениями в другое представление.

Я попытаюсь объяснить, шаг за шагом:

  1. Создать выход для него: myView
  2. Щелкните правой кнопкой мыши файл .xib>Open As>Source Code или открыть его в другом редакторе (например, Sublime Text)
  3. Поиск myView и вы найдете что-то вроде:

    <outlet property="myView" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> 
    

    и скопировать значение атрибута destination

  4. Поиск скопированного идентификатора (i5M-Pr-FkT) и один из результатов будет view тега:

    <view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 --> 
        ... 
    </view> 
    
  5. Вырезать и вставить весь этот view тег в нужном виде-х subviews тег:

    <view contentMode="scaleToFill" id="Ovp-8Y-qHZ"> <!-- 2 --> 
        <subviews> 
         <view contentMode="scaleToFill" id="i5M-Pr-FkT"> <!-- 1 --> 
          ... 
         </view> 
        </subviews> 
    </view> 
    
  6. Продолжить поиск для скопированного идентификатора и вы будете плавник d некоторые ограничения, которые имеют это нравится:

    <constraint firstItem="w7M-JQ-JWD" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="EwH-B1-XWY"/> 
    
  7. Вы должны переместить это в 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> 
    
+0

Отличный ответ! Я вижу, что вы ищете просмотр по 'id', и что, если я хочу * скопировать * этот вид, а не * вырезать * и вставить? Я полагаю, что 'id' должен быть уникальным. Должно ли оно быть создано некоторыми конкретными правилами, или этого было бы достаточно, чтобы случайно изменить его? – kelin

+0

Да, 'id' должен быть уникальным для файла' .xib', поэтому он не может быть одинаковым даже для 'view' и' constraint'. Я не могу гарантировать вас, но из того, что я видел, это абсолютно случайный, но чтобы быть в безопасности, держите его в том же формате: «3 символа - 2 символа - 3 символа». Вы также можете добавить новое представление, обнаружить его, либо позиционируя его в верхней части иерархии представлений, чтобы вам было проще, либо путем размещения файла перед его добавлением, скопировать его «id», удалить представление и использовать его 'id'. –

+0

Также, пожалуйста, примите этот ответ, если это вам помогло, так как текущий не достигает того, что вы просили. –