IOS 7.1, Ограничения обычной ширины на универсальной раскадровке игнорируются, если семейство целевых устройств установлено на iPad

Я начал новый проект одного представления на Xcode 6.1
перешел к моей цели и установил для семейства устройств универсальный, а для цели развертывания - 7.1

В раскадровке я поместил красную метку в классе Size Regular Width | Any Height и синяя метка в классе размеров Compact Width | Any Height

Согласно документации, я должен видеть красную метку при работе на ipad и синюю на iphone. Пока что это работает как на симуляторе, так и на реальных устройствах.

Теперь я вернулся к цели и установил для семейства устройств IPad, снова запустив приложение:

  1. IPad 2 (7.1) на симуляторе - красная этикетка

  2. IPad 2 (7.1) (реальное устройство) - синяя метка?!?!?

  3. IPad 2 (8.1) (реальное устройство) - красная этикетка

То же самое касается IPad Air/ IPad mini и любого другого IPad с IOS 7.1, с которым я сталкивался

По сути, я вижу, что на универсальной раскадровке при настройке семейства устройств для IPad в ios 7.1 раскадровка считается компактной. Я должен быть совместим с IOS 7.1, и мое приложение будет выпущено только для IPad. У кого-нибудь есть подсказка, как это исправить?

редактировать

Согласно документации Apple: для приложений, поддерживающих версии iOS более ранние, чем iOS 8, большинство классов размеров имеют обратную совместимость. Размерные классы обратно совместимы до тех пор, пока

  1. Приложение построено с использованием Xcode версии 6 или новее

  2. Цель развертывания приложения раньше, чем iOS 8

  3. Классы размеров указаны в раскадровке или в Xib

  4. Значение компонента высоты не компактно

Все вышеперечисленное относится к моему примеру.

2 ответа

Я попытался сравнить промежуточные файлы, созданные в папке сборки xcode, но, насколько я могу судить, в тестируемом устройстве нет зависимости (имеется в виду, что, пока я устанавливаю цель развертывания 7.1, не имеет значения, на какой платформе он собирается работать). в конечном итоге будет развернуто) Поэтому я склонен думать, что это не ошибка в xcode или ios 7.1, но на самом деле просто не имеет обратной совместимости для этого конкретного сценария.

Я отправил сообщение об ошибке в службу технической поддержки Apple, но пока не получил от них никакого повтора. На данный момент кажется, что обходной путь должен был бы установить все Regular width ограничения как Any width и удалите Compact width ограничения, и как только приложение будет выпущено для IPhone, отмените это изменение.

SIMULATOR VS. УСТРОЙСТВО? Мне удалось воспроизвести проблему, о которой вы сообщаете, в симуляторе.

Я думаю, что вы предполагаете, что ваш симулятор работает правильно, потому что он дает ожидаемый результат, а именно iPad отображает "неправильный" макет. Однако стоит подумать, действительно ли iPad отображает стандартный вывод для вашей конфигурации, даже если этот вывод представляет ошибку. Предварительный просмотр раскадровки в XCode показывает правильное поведение для конфигурации, но он некорректен в симуляторе для iPad 2 (7.1) и действительно для других моделей iPad, а также при работе с iOS 7.1. Ожидаемое поведение видно для iOS 8.x в симуляторе. Следовательно, это не проблема симулятора и устройства. Я подозреваю, что причина того, что вы увидели разные результаты в вашем симуляторе, заключалась в том, что вы не выполнили чистую сборку с момента критического изменения, вызвавшего это, поэтому он все еще использовал старый XIB, поскольку они кэшируются дольше, чем должны быть. иногда.

ПРИЧИНЫ ПРОБЛЕМЫ? Вы настраиваете семейство устройств вашего проекта для таргетинга только на iPad, но включаете в свою раскадровку класс размера Compact Width | Any Heightкласс размера, который iPad никогда не должен использовать. Это может быть аспектом конфигурации, который вызывает эту проблему. Тем не менее, это все равно не должно происходить. Эта проблема возникает с обоими Xcode 6.1 и не отличается в текущей бета-версии 6.2.

Там может быть определенный аспект вашей текущей конфигурации, которая вызывает это. В частности, автоматическое расположение и цели устройства зависят от экранов запуска в некоторых задокументированных, но часто неожиданных для разработчика способах. (Например, использование раскадровки для экрана запуска автоматически сделает ваше приложение доступным, даже если вы указали, что в вашей цели должно быть только iPhone.) Существуют и другие случаи (см. Этот вопрос и ответ о переполнении стека), когда выполняется миграция. запуск изображений в другой конфигурации позволил решить подобные проблемы. Так что стоит попробовать.

Другие вопросы по тегам