Неверные представления каждый раз, когда Xcode перезапускается

Я использую раскадровки в первый раз в своем приложении

Когда я закрываю Xcode, у меня есть 0 предупреждений о неулокальных представлениях или что-то, что касается моего раскадровки. Когда я перезапускаю Xcode и открываю раскадровку, 3 из моих 15 сцен имеют неправильные предупреждения о просмотре.

Не касаясь ничего (кроме выбора файла), я могу выпустить git status и увидеть, что файл .storyboard имеет изменения. Если я git diff, я вижу, что это включено в несколько областей файла:

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>

Если элемент уже имел <variation key="widthClass=Compact" node, то добавляются атрибут misplaced и rect node.

Единственное, что мне нужно сделать, чтобы заставить предупреждения уйти, - щелкнуть по каждому из них, убедиться, что выбран "Обновить кадр" и нажать "Исправить смещение". Это исправляет все, пока я не перезапущу Xcode.

Основная структура моей сцены:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl

Как я могу предотвратить это при каждом запуске?

Ответ 1

Это обычно происходит, если вы не установили ограничения правильно.

Попробуйте удалить все виды внутри UIViewController и снова добавить снова вместе с вашими ограничениями.

Очистите и запустите свой код.

Ответ 2

Одной из возможных причин неудачных просмотров является: Если вы использовали живые просмотры (IBDesignables) в раскадках, тогда, если вы откроете раскадровку и быстро перейдете к другому файлу до того, как IB закончит строить все живые представления, то представления будут неуместны. IB начинает строить живые представления, как только вы просматриваете панель рассказов в редакторе. Чтобы исправить неулокальные взгляды, позвольте IB некоторое время завершить построение раскадровки, оставаясь на раскадровке в течение нескольких мгновений, и неулокальные взгляды будут исправлены.

Ответ 3

В моем случае это происходит для всех меток/кнопок с пользовательскими шрифтами и внутренними (не явно определенными) размерами. Похож на ошибку Xcode.

Ответ 4

Я сталкиваюсь с тем же вопросом раньше, и я полагаю, что это не наша ошибка, это просто ошибка Xcode.

Если ваш файл .storyboard изменился, но вы ничего не трогали, просто выберите файл и выберите меню Xcode Source ControlDiscard Changes in "xxxx.storyboard"..., это должно быть работа:)

Ответ 5

Эта проблема возникает, когда вы добавляете ограничения, которые не соответствуют фактическому размеру экрана во время выполнения. например: если у вас есть UIButton с шириной, превышающей ширину экрана (скажем, ширину 600), и вы добавляете ограничение фиксированной ширины к этому UIButton, но не имеют никаких ведущих или конечных ограничений, Xcode не даст вам предупреждений, поскольку конфликтов нет, но когда вы фактически запускаете приложение на устройстве или симуляторе с шириной экрана менее 600, Xcode будет автоматически настраивать ширину UIButton, чтобы она соответствовала ширине экрана, которая меньше 600, в результате чего ваши ограничения макета меняются на то, что соответствовало экрану во время выполнения

Ответ 6

Если вы используете классы размера, то либо ваши ограничения не соответствуют значению (в соответствии со всем типом устройства, если Any-Any). Если нет, попробуйте отрегулировать рамку или ограничения и еще раз проверьте.

Авто-макет также может вызвать эту проблему. Вы получите всю информацию о предупреждении, как только вы нажмете на них.

Ответ 7

Раньше я сталкивался с той же проблемой с моим предыдущим приложением. Я заметил, что размер раскадровки имеет значение здесь.

Это проблема с Xcode.

Если мы используем раскадровку любой ширины любой высоты, эта проблема не возникает. Если вы используете раскадровку размером Компактная ширина регулярной высоты, эта проблема возникает.

Итак, попробуйте использовать размер раскадровки по умолчанию в Xcode

Ответ 8

  • щелкните, чтобы просмотреть обычный файл (не .xib или .storyboard файл)
  • quit xcode
  • run git checkout .
  • перезапустить xcode

Файл .storyboard теперь не изменяется.

Ответ 9

Простое исправление может состоять в том, чтобы просто разрешить xCode выбирать ограничения для вас, а затем вернуться и проверить, что он выбрал, чтобы убедиться, что он будет работать для вас.

В раскадровке:

  • Выберите "Просмотр контроллера", дающий вам проблемы
  • Устранение проблем с автоматической компоновкой (внизу справа)
  • Выбранные виды: Reset to Предлагаемые Ограничения

Чтобы проверить, какие ограничения были reset:

  • Выбрать каждый просмотр в контроллере
  • Инспектор ограничений (вверху справа)
  • прокрутите вниз и проверьте ограничения

Ответ 10

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

Попробуйте разрешить его, выбрав тот же класс по размеру после открытия проекта, как вы выбрали до закрытия проекта.

Например, если вы выбрали класс размера как wCompact hRegular для iPhone, и вы закрыли свой проект. После возобновления проекта вы увидите, что класс размера изменился на wRegular hRegular. Из-за этого объекты вида меняются. Чтобы решить проблему, снова выберите wCompact hRegular.

Надеюсь, это поможет.

Ответ 11

Сначала проверьте, что вы выполняете все ограничения. Если все ограничения правильны, удалите связанные ограничения и повторно установите.