Ответ 1
Это обычно происходит, если вы не установили ограничения правильно.
Попробуйте удалить все виды внутри UIViewController и снова добавить снова вместе с вашими ограничениями.
Очистите и запустите свой код.
Я использую раскадровки в первый раз в своем приложении
Когда я закрываю 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
Как я могу предотвратить это при каждом запуске?
Это обычно происходит, если вы не установили ограничения правильно.
Попробуйте удалить все виды внутри UIViewController и снова добавить снова вместе с вашими ограничениями.
Очистите и запустите свой код.
Одной из возможных причин неудачных просмотров является: Если вы использовали живые просмотры (IBDesignables) в раскадках, тогда, если вы откроете раскадровку и быстро перейдете к другому файлу до того, как IB закончит строить все живые представления, то представления будут неуместны. IB начинает строить живые представления, как только вы просматриваете панель рассказов в редакторе. Чтобы исправить неулокальные взгляды, позвольте IB некоторое время завершить построение раскадровки, оставаясь на раскадровке в течение нескольких мгновений, и неулокальные взгляды будут исправлены.
В моем случае это происходит для всех меток/кнопок с пользовательскими шрифтами и внутренними (не явно определенными) размерами. Похож на ошибку Xcode.
Я сталкиваюсь с тем же вопросом раньше, и я полагаю, что это не наша ошибка, это просто ошибка Xcode.
Если ваш файл .storyboard
изменился, но вы ничего не трогали, просто выберите файл и выберите меню Xcode Source Control
→ Discard Changes in "xxxx.storyboard"...
, это должно быть работа:)
Эта проблема возникает, когда вы добавляете ограничения, которые не соответствуют фактическому размеру экрана во время выполнения. например: если у вас есть UIButton с шириной, превышающей ширину экрана (скажем, ширину 600), и вы добавляете ограничение фиксированной ширины к этому UIButton, но не имеют никаких ведущих или конечных ограничений, Xcode не даст вам предупреждений, поскольку конфликтов нет, но когда вы фактически запускаете приложение на устройстве или симуляторе с шириной экрана менее 600, Xcode будет автоматически настраивать ширину UIButton, чтобы она соответствовала ширине экрана, которая меньше 600, в результате чего ваши ограничения макета меняются на то, что соответствовало экрану во время выполнения
Если вы используете классы размера, то либо ваши ограничения не соответствуют значению (в соответствии со всем типом устройства, если Any-Any). Если нет, попробуйте отрегулировать рамку или ограничения и еще раз проверьте.
Авто-макет также может вызвать эту проблему. Вы получите всю информацию о предупреждении, как только вы нажмете на них.
Раньше я сталкивался с той же проблемой с моим предыдущим приложением. Я заметил, что размер раскадровки имеет значение здесь.
Это проблема с Xcode.
Если мы используем раскадровку любой ширины любой высоты, эта проблема не возникает. Если вы используете раскадровку размером Компактная ширина регулярной высоты, эта проблема возникает.
Итак, попробуйте использовать размер раскадровки по умолчанию в Xcode
.xib
или .storyboard
файл)git checkout .
Файл .storyboard
теперь не изменяется.
Простое исправление может состоять в том, чтобы просто разрешить xCode выбирать ограничения для вас, а затем вернуться и проверить, что он выбрал, чтобы убедиться, что он будет работать для вас.
В раскадровке:
Чтобы проверить, какие ограничения были reset:
В нижней части панели рассказов есть возможность выбрать класс размера. Если я изменю параметр из wRegular hRegular на любой другой вариант, я получаю аналогичную проблему. Я не знаю причину этого.
Попробуйте разрешить его, выбрав тот же класс по размеру после открытия проекта, как вы выбрали до закрытия проекта.
Например, если вы выбрали класс размера как wCompact hRegular для iPhone, и вы закрыли свой проект. После возобновления проекта вы увидите, что класс размера изменился на wRegular hRegular. Из-за этого объекты вида меняются. Чтобы решить проблему, снова выберите wCompact hRegular.
Надеюсь, это поможет.
Сначала проверьте, что вы выполняете все ограничения. Если все ограничения правильны, удалите связанные ограничения и повторно установите.