Я занимаюсь разработкой приложения для iPhone и iPad. Он поддерживает iOS6 и iOS7, и он использует только автоматическую компоновку.
На прошлой неделе, когда Apple объявила, что iOS8 готова к прайм-тайм, я обновил один из своих iPhone и iPad как на iOS8. Я также столкнулся с XCODE до версии 6. У меня есть второй iPhone, который я оставил в iOS7.
Я сгенерировал новые исполняемые файлы с Xcode 6, и я был огорчен, увидев, что их макеты экрана были испорчены при выполнении на моих устройствах, работающих под управлением iOS8, но все еще прекрасных на iOS7. Это верно как для физических устройств, так и для эмуляторов Xcode.
Потребовалось много рытья, но теперь я понимаю, что происходит, хотя я не знаю почему.
В частности, некоторые операции автоматического макета для меня не работают на iOS8, но они отлично работают на iOS7.
Некоторые примеры, связанные с кнопкой, которую я помещаю в базовое представление, размер которого равен размеру экрана:
(1) Если я запрошу автомасштабирование, чтобы поместить горизонтальный центр кнопки (CX), равный основному горизонтальному центру обзора, результатом является то, что горизонтальный центр кнопки расположен на левом краю левого края.
(2) Если я попрошу автомасштабирование, чтобы ширина кнопки была равна 50% ширины основного представления, она не дает никакой ширины.
Я могу обойти эти проблемы следующим образом:
(1) Я прошу автомасштабировать положение центра кнопки, равное левому краю основного левого края плюс 50% ширины экрана.
(2) Я прошу автомат сделать ширину кнопки равной 50% ширины экрана.
Я медленно пробиваю себе путь, используя обходные пути, подобные этим, обратно в автоматический макет кода, который работает для меня как на iOS7, так и на iOS8. Но мне действительно интересно, что здесь происходит.
Похоже, что автоматическая компоновка не может определить размер базового представления и, таким образом, автоматические вычисления компоновки, требующие, чтобы информация вышла из строя. Но он знает, где верхний и левый края представления так устроены на основе этих данных.
Это большое приложение, и я написал много сотен строк кода автоматического макета для iOS6 и iOS7, которые отлично работают для меня.
Я уже три дня настраивал и пробовал работу с iOS8, и я не был мудрее, чем был, когда начал.
У кого-нибудь есть предложения или мысли относительно того, что может быть проблемой здесь?