Проблеми з макетом після оновлення до Xcode 8


102

Ось перед і після одного з моїх екранів після того, як я перейшов до Xcode 8.
Все, що я робив, це відкрити свою головну історію та звідти я створив і запустив додаток на своєму телефоні.
У моєму управлінні версіями я бачу, що Xcode робить багато змін на моєму main.storyboard саме після того, як я його відкриваю.
Щоразу, коли я видаляю ці зміни, я бачу те, що я бачу в Xcode 7.3.1.
Але, як тільки я знову відкриваю конструктор інтерфейсів зі своєю дошкою, я бачу, що ці зміни повертаються на свої місця.

Чи можна щось тут зробити?

Перед Xcode 8

введіть тут опис зображення

Після оновлення до Xcode 8

введіть тут опис зображення


Спробуйте відкрити XCode 8 ще раз із свіжим джерелом (зберігайте всі зміни, внесені раніше). Тепер, коли ви відкриєте табло, виділіть усі елементи інтерфейсу та натисніть «Оновити кадри». Це може вирішити вашу проблему.
d1str0

6
Не могли б ви подати помилку на bugreport.apple.com та приєднати табло, для якого це відбувається? Ми хотіли б проаналізувати це далі.
Квінн Тейлор

1
У мене точно така ж проблема. Після відкриття моєї розкадровки в Xcode8 та прийняття діалогового вікна "Вибрати початковий вигляд пристрою", все відбувається дивно. Коли я оновлюю всі кадри, ІБ виглядає добре, але після побудови додаток повністю розбитий. Тестували його за допомогою 4-х додатків.
Cherrypig

@QuinnTaylor У мене є аналогічна проблема, після того як Xcode 8 перетворює мою розкадровку, UIImageViews в UITableViews не показує вмісту, хоча їх контури видно в Debug View Hierarchy. Інші об'єкти того ж класу, які є в UICollectionViews, не впливають.
Мануель

XIB або Storyboard встановлюють за замовчуванням як старішу версію 7.x, так і Зберегти та закрити. Тимчасове рішення, але працює. Не відкривайте знову після того, як ви зробили Зберегти та закрити. Інакше знову потрібно виконати ті ж самі кроки від початку.
Bhavesh Kumbhani

Відповіді:


111

У мене була схожа проблема із тим, що зображення з табличного перегляду не з’являлися, як тільки я перетворив файл розкадрівки на сумісний з Xcode8. Це схоже на помилку з Xcode8, тому, поки виправлення помилки не випущено, ось ось що:

  1. Відкрийте свою рекламну дошку в Xcode 8 і виберіть початковий вид пристрою. Внесіть зміни, як зазвичай.
  2. Після завершення змін виберіть розкадровку -> Інспектор файлів -> Відкривається в -> Виберіть "Xcode 7.x".

введіть тут опис зображення

  1. Виберіть "Зберегти та закрити", коли з'явиться запит
  2. Зміни вашої розкадровки будуть збережені, і ваша раскадровка буде функціонувати так, як це було зроблено до Xcode8.

Коли вам потрібно внести інші зміни до файлу розкадровки, виконайте ці дії ще раз.


Вау +1 для цього точно. Я боровся з цим в iOS 10 в рамках свого TodayExtension. Тільки коли я не звузив речі, аналізуючи git diff, я побачив, що підозрілі редактори XML редагуються, додані Xcode 8. Після збереження документа раскадровки для Xcode 7 (після внесення змін) я можу тепер створювати та відправляти за допомогою Xcode 8 для iOS 10. Дякую.
Джон Ерк

Це впевнено виглядає помилка. Збереження як відкривання в Xcode 7.x працювало для мене як тимчасове вирішення.
Стів А

Я витратив останні 3 дні на виправлення всіх розбитих макетів з місця на місце в Xcode8, поки я не знайшов цю посаду. я, мабуть, повинен більше довіряти людям, як ви, хлопцям, ніж Apple. не можу повірити, що це витрачала стільки мого часу. Дуже дякую Давидові за це!
Сю Інь

@XuYin Чи варто це робити для кожної розкадровки? Я маю на увазі, що якщо у мене в проекті є ще одна дошка? Що з файлами Xib? чи варто це робити і для них?
Мед

@Honey я цього не робив на раскадровці, але я робив на кожному Xib-файлі, який у мене є проблема. але я думаю, ви можете спробувати це також на раскадровці, якщо ви побачите проблему з макетом. оскільки це виправлення займе лише 5 секунд. і після відновлення програми ви зможете побачити виправлення дуже швидко.
Сю Інь

14

XIB або Storyboard встановлюють за замовчуванням як старішу версію 7.x, так і Зберегти та закрити. Тимчасове рішення, але працює. Не відкривайте знову після того, як ви зробили Зберегти та закрити. Інакше знову потрібно виконати ті ж самі кроки від початку.введіть тут опис зображення


6
Це не допомагає, оскільки мені потрібно працювати над файлом. Все це - це зберегти файл для зворотної сумісності. Це не дозволяє редагувати Xib у Xcode 8.
jowie

Я роблю це, але знову ж таки, коли я вибираю файл xib у спадному меню, він показує лише xcode 8.0 ...
jayant rawat

8

Е та ж проблема. Частково мені вдалося виправити це наступним чином ( для Xcode Version 8.1 (8B62) )

У структурі документа Storyboard я натискав на кожну сцену, на якій була жовта стрілка із зазначенням деяких проблем із компонуванням (номер 1 на скріншоті)

Після цього для кожної проблемної сцени мені довелося натиснути на невелику піктограму «Оновити кадри» (номер 2 на скріншоті), яка виправляла всі проблеми з компонуванням на кожній сцені.

введіть тут опис зображення

Однак одна сцена в моєму випадку все ще перебуває в плачевному стані після переходу від Xcode7 до Xcode8. Мені довелося це виправити вручну, коригуючи обмеження або додавши відсутні обмеження.

Фу, не приємний сюрприз XCode8 та Storyboards. Якщо ви використовували редактор AppCode, у вас не виникне такої проблеми, оскільки він не підтримує панелі розказок; P

Удачі!



6

Будь-ласка, дотримуйтесь теми для будь-якого можливого рішення: (Я вважаю, це трапляється з багатьма розробниками).
Проблема Xcode 8 GM Серія розгортки
Xcode 8 - Попередні

дошки розгортання, які спотворюються (я використовував будь-яку ширину 600WWWW 600) Коли Xcode оновлювався до Xcode 8, він змінив усі розміри ViewControllers. В результаті вся компонування була спотворена.
Наразі я бачу лише 3 рішення проблеми (я б не сподівався на очікування виправлення незабаром).

1.Перейти до кожного Viewcontroller і виправити його Update Frames.

2.Перейти до основного ViewController, Size Inspector -> Freeform -> 600оскільки більшість контролерів зроблено, це змінить розмір для всіх. (Будьте уважні до впливу нових функцій Apple, які я хочу представити).

3. Відмовтеся від змін у git на аркуші розкадровки (я б не радив цього, тому що Apple також вставила деякі оновлення, які можуть бути важливими для Xcode).

Додаткове посилання на нові функції AutoLayout в Xcode 8 (WWDC16): Зробити додатки адаптивними, частина 1


1
Варіант 1 є найрозумнішим, і він працював на мене. Як зазначає Mike.R, будьте обережні, намагаючись «обдурити» XCode у виправленні речей, оскільки більше неприємностей у дорозі неминуче.
аркадій боб

Я також використав варіант 1 (я вважаю, що це більш безпечно). Але це забирає багато часу.
Майк.R

5

У моєму випадку працює рішення, запропоноване Ахілом Катеджем, і мені також потрібно скинути ширину та висоту основного виду:

1) Установіть розмір перегляду на вільну форму

введіть тут опис зображення

2) Скиньте ширину та висоту перегляду до початкового розміру:

введіть тут опис зображення

Нарешті збережіть, і ви закінчите.


4

Для мене рішенням було просто натиснути на UIViewController, що має проблеми, а потім Editor > Resolve Auto Layout Issues > All Views In ... > Updates Frames

Він перевпорядкував перегляди, щоб відповідати існуючим обмеженням, виходячи з недавно вибраного режиму перегляду за замовчуванням (в моєму випадку iPhone 7).

Також зверніть увагу: якщо ви отримуєте панель навігації Misplaced Перегляд попередження , як я зробив, просто виберіть UINavigationController / UIViewController , а потім Attributes Inspector > Bar Visibility > Shows Navigation Bar- переключити його OFF , а потім знову ввімкніть.


3

Установка Вид Розмір в Freeform від Inferred працював для мене. Його можна знайти під заголовком « Імітовані показники в інспекторі атрибутів» .


3

У мене була така ж проблема, і я вирішив її шляхом примусового оновлення обмежень перегляду контролера. Помістіть наступний код в viewDidLoad () функція

self.view.layoutIfNeeded()

1
Привіт Білл! що 'layoutIfNeeded' працював на мене! (Після години спробував все інше ..)
Етан Халпрін


3

Відповідь від @ david-truong ( https://stackoverflow.com/a/39589860/1407528 ) у моєму випадку не працює, тому якщо ви опинилися в моїй самій ситуації, спробуйте це:

  • Завантажте попередній 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, не будуть доступні за допомогою цього фокусу, але ви повинні мати можливість завантажувати та будувати проект.


3

Сподіваюсь, це допоможе

Коли я оновив Xcode з 7,3 до Xcode 8 і запустив додаток, деякі з них переглядаються ідеально, але деякі спотворені. Потім я перевірив файл ручки, і це запропонувало мені вибрати конкретний розмір пристрою, а потім показати ручку відповідно до цього розмір пристрою, який є поза межами курсу Any-Any(Xcode 7.3). Таким чином, всі файли nibs не відображаються правильно.

Робота з рішенням мене: - натисніть на жовту стрілку, як показано на зображенні нижче

введіть тут опис зображення

він підкаже спливаюче вікно, яке показує варіанти

введіть тут опис зображення

Вибір Update Framesз Apply to all views in containerCheck.it вирішить близько 90% спотвореного інтерфейсу, а решту проблем з обмеженнями для автоматичного макета можна вирішити вручну.


Це також може зіпсувати макети. ІМХО це потрібно робити дуже обережно, по одному огляду і перевіряючи, чи спрацювали речі, перш ніж продовжувати.
мозковий масив

так, поза увагою вам потрібно витратити певний час, і це рішення може допомогти вам у довгостроковій перспективі, як коли ви хочете оновити частину інтерфейсу ур.
Анураг Бхакуні

1

Я вирішив проблему за допомогою Xcode версії 7.3.1, ви можете завантажити .dmg файл з порталу розробників Apple. Я використовував функцію автоматичного аналізу в кожному додатку, і це чудово працює для мене. я оновлю до Xcode 8, лише якщо вони зможуть виправити цю помилку.

Завантажте його тут: https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg


Це рішення марно, якщо ви хочете підтримати iOS 10
jungledev

1

Щоб виправити подібну проблему, я налаштував xib як Freeform (не Inferred) І збережений xib файл як сумісний з Xcode 7.x. Обидва кроки були потрібні в моєму випадку. Я сподіваюся, що це допомагає!


1

Я помічаю одну нову кнопку в Xcode 8.2, (перевірте помаранчеве коло на зображенні). Це допоможе вам трохи допомогти.

Етапи: 1. Відкрийте дошку та виберіть будь-який потрібний вам пристрій. Просто виберіть Контролер перегляду 3. Клацніть на згаданій кнопці (як на зображенні).

Я не знайшов кращого рішення, ніж це. Будь ласка, дайте відповідь, якщо її знайшли.

Скріншот IB


Нічого не сталося.
Муджу

0

оновлення обмежень та підгляди макета у viewdidload вирішує проблему

- (void) viewDidLoad {
        [self.view updateConstraints];
        [self.view layoutSubviews];
        [super viewDidLoad];
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.