Подтвердить что ты не робот

Можно ли скопировать ограничения из одного вида в другое?

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

4b9b3361

Ответ 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