Вот до и после одного из моих экранов после того, как я обновился до Xcode 8.
Все, что я сделал, это открыть мою main.storyboard, а оттуда я построил и запустил приложение на своем телефоне.
В моем управлении версиями, я вижу, что Xcode делает много изменений в моей main.storyboard только от меня, открывая его.
Всякий раз, когда я удаляю эти изменения, я могу видеть, что я использую для просмотра в Xcode 7.3.1.
Но, как только я снова открою конструктор интерфейса с моей раскадрой, я вижу, что эти изменения возвращаются на свои места.
Я могу что-то здесь сделать?
Проблемы с компоновкой после обновления до Xcode 8
Ответ 1
У меня была аналогичная проблема с изображениями таблицы, которые не появляются, когда я преобразовал файл раскадровки в совместимый с Xcode8. Это похоже на ошибку с Xcode8, поэтому до тех пор, пока не будет исправлено исправление ошибки, вот работа:
- Откройте раскадровку в Xcode 8 и выберите начальное представление устройства. Внесите изменения, как обычно.
- После того, как вы завершили свои изменения, выберите раскадровку → File Inspector → Opens in → Select 'Xcode 7.x'.
- Выберите "Сохранить и закрыть" при появлении запроса
- Изменения в раскадровке будут сохранены, и ваш раскадровка будет работать так же, как и pre-Xcode8.
Если вам нужно внести другие изменения в файл раскадровки, выполните следующие действия.
Ответ 2
XIB или Storyboard устанавливаются по умолчанию как более ранняя версия 7.x и сохраняются и закрываются. Временное решение, но работает. Не открывайте снова, как только вы выполнили сохранение и закрытие. В противном случае вам снова нужно выполнить те же шаги.
Ответ 3
Eh та же проблема. Частично мне удалось исправить это следующим образом (для Xcode Version 8.1 (8B62))
В контуре документа раскадровки я щелкнул по каждой сцене, у которой была желтая стрелка, указывающая на некоторые проблемы с макетом (номер 1 на скриншоте).
После этого для каждой проблемной сцены мне пришлось щелкнуть маленькую иконку "Обновить фреймы" (номер 2 на снимке экрана), в которой исправлены все макеты на сцену.
Однако одна сцена в моем случае все еще была в плачевном состоянии после перехода от Xcode7 к Xcode8. Я должен был исправить это вручную, установив ограничения или добавив недостающие ограничения.
Фу, не приятно удивлять XCode8 и Storyboards. Если вы использовали редактор AppCode, у вас не будет такой проблемы, поскольку он не поддерживает раскадровки, P
Удачи!
Ответ 4
Xcode 8.1 Beta 2 разрешает эту проблему. Проверьте эту ссылку для скачивания
Ответ 5
Пожалуйста, следуйте за нитями для любого возможного решения: (Я считаю, что это происходит со многими разработчиками).
Xcode 8 выпуск распада семян GM
Xcode 8 - предыдущие раскадровки искажаются
(Я использовал anyH anyW ширину 600). Когда Xcode обновлен до Xcode 8, он изменил весь размер ViewControllers. В результате все макет был искажен.
В настоящее время я вижу только 3 решения проблемы (я бы не стал надеяться на скорое исправление).
1.Go для каждого Viewcontroller и закрепите его на Update Frames
.
2. Перейдите к главному ViewController Size Inspector -> Freeform -> 600
, поскольку выведено большинство контроллеров, это изменит размер для все они. (Будьте осторожны с воздействием новых функций Apple, я хочу ввести).
3. Отметьте изменения в git для раскадровки (я бы предложил это, потому что Apple также внедрила некоторые обновления, которые могут быть важны для Xcode).
Дополнительная ссылка для новых функций AutoLayout в Xcode 8 (WWDC16): Создание приложений Adaptive, часть 1
Ответ 6
В моем случае для решений, предложенных Ахилем Катейхой, мне также необходимо reset Ширина и высота основного вида:
1) Установите размер представления в свободную форму
2) reset Ширина и высота представления до исходного размера:
Наконец, сохраните, и все готово.
Ответ 7
Настройка размера представления в Freeform из Inferred работала для меня. Его можно найти в заголовке "Имитированные показатели в инспекторе атрибутов".
Ответ 8
У меня была такая же проблема, и я решил ее силой обновить ограничения вида контроллера. Поместите следующий код в свою функцию viewDidLoad()
self.view.layoutIfNeeded()
Ответ 9
Я выбрал каждый контроллер и нажал "Обновить фреймы", и он исправил макет.
Ответ 10
Ответ от @david-truong (fooobar.com/questions/56970/...) не работает в моем случае, поэтому, если вы в той же ситуации, попробуйте следующее:
- Загрузите предыдущий Xcode 7.3.1 отсюда: https://developer.apple.com/download/more/
- Отмените все свои изменения (если у вас есть менеджер кода, например git. Если вы этого не сделаете, вы должны https://githowto.com/ ')
- Откройте проект с помощью Xcode 7.3.1.
В случае, если все ваши устройства обновлены до версии iOS 10+, эта версия Xcode не будет распознавать эти устройства в качестве совместимых устройств. Итак, попробуйте с этим трюком:
- Перейдите к:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
- Скопируйте папки, связанные с iOS 10 или 10.1, в:/Applications/Xcode 7.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
- Откройте проект с помощью Xcode 7.3.1 (перезапустите Xcode, если он уже открыт)
- Выберите подключенное устройство iOS 10+
- Push Run
Примечание. Новые функции, такие как Swift, будут недоступны при использовании этого трюка, но вы должны иметь возможность загружать и создавать свой проект.
Ответ 11
Надеюсь, это поможет
Когда я обновил Xcode с 7.3 до Xcode 8 и запустил приложение, некоторые из них прекрасно отображаются, но некоторые из них искажены. Затем я проверил файл nib, и он попросил меня выбрать определенный размер устройства, а затем показать значок в зависимости от того размера устройства, которое не является Any-Any(Xcode 7.3)
. Таким образом, все файлы nibs отображаются неверно.
Работа решения меня: нажмите желтую стрелку, как показано на рисунке ниже
появится подсказка, в которой отображаются такие параметры, как
выберите Update Frames
с помощью Apply to all views in container
checked.it будет разрешено около 90% искаженного пользовательского интерфейса, а остальная часть ограничений автоматического макета может быть решена вручную.
Ответ 12
Для меня решение было просто щелкнуть по UIViewController с проблемами, а затем Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames
Переделал представления, чтобы они соответствовали существующим ограничениям, основанным на недавно выбранном представлении по умолчанию (iPhone 7 в моем случае).
Также обратите внимание: если вы получаете предупреждение Навигационная панель Misplaced View, как я это делал, просто выберите UINavigationController/UIViewController, а затем Attributes Inspector > Bar Visibility > Shows Navigation Bar
- отключите его, а затем снова включите.
Ответ 13
Я исправил проблему с помощью Xcode Version 7.3.1, вы можете загрузить файл .dmg с портала разработчиков Apple. Я использовал Autoresizing в каждом приложении, и он отлично работает для меня. я буду обновлять до Xcode 8, только если они могут исправить эту ошибку.
Загрузите его здесь: https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg
Ответ 14
Чтобы устранить подобную проблему, я сконфигурировал xib как Freeform (not Inferred) И сохранил файл xib как совместимый с Xcode 7.x. Оба шага были необходимы в моем случае. Надеюсь, это поможет!
Ответ 15
Я заметил одну новую кнопку в XCode 8.2 (проверьте оранжевый круг на изображении). Это даст вам некоторую помощь.
Шаги: 1. Откройте раскадровку и выберите любое устройство, которое вы хотите 2. Просто выберите контроллер просмотра 3. Нажмите указанную кнопку (как на изображении) 4. Он обновит фрейм для этого контроллера просмотра и вы сможете продолжить его.
Я не нашел лучшего решения, чем это. Ответьте, если найдете его.
Ответ 16
ограничения обновления и представления в виде viewdidload решают проблему
- (void) viewDidLoad {
[self.view updateConstraints];
[self.view layoutSubviews];
[super viewDidLoad];
}