Представление раскадровки, разработанное правильно с автоматическим макетом и вариациями признаков в конструкторе интерфейсов Xcode 8, имеет неправильный размер в симуляторе и устройстве

Я много лет работал над приложениями для iOS, прежде чем наступила более длительная пауза. В своем новом проекте я решил попробовать новые функции Interface Builder и Storyboards (Swift 3, Xcode 8.2.1). Итак, у меня есть работающее приложение с точно определенными ограничениями для всех поддерживаемых устройств, в соответствии с парадигмой «обычная» и «компактная» ширина/высота. Все, казалось, работало, и мне понравился подход.

Я заканчивал первые представления (и их контроллеры) для симулятора iPad, прежде чем решил запустить приложение также на симуляторе iPhone, чтобы проверить макет. Получается, что все работает как положено, но для ОДНОГО просмотра.

Это представление имеет следующее поведение:

  • Если на холсте раскадровки (и даже в редакторе помощи, который, кстати, для меня выглядит так же) я выбрал «просмотреть как iPad 9,7» и запустил симулятор iPad (с тем же размером экрана), макет работает так и должно быть.
  • Если на холсте раскадровки я выбрал «просмотреть как iPhone 5» и запустил симулятор iPhone 5, макет работает так, как должен.
  • Однако, если я выберу «просмотреть как iPhone 5» и запущу приложение на симуляторе iPad ИЛИ любой другой ложной комбинации, произойдет следующее:

Как только представление появляется (настраиваемый переход или нажатие по умолчанию. Все представления находятся внутри контроллера навигации), оно показывает содержимое, уменьшенное / увеличенное до размера размера предварительного просмотра, который я выбрал в раскадровке. Затем он анимируется (масштабируется от верхнего левого угла), чтобы заполнить экран. Например: если я выберу «просмотреть как iPhone 5» и запущу на iPad, вид появится в левом верхнем углу симулятора iPad размером с iPhone 5. Затем он масштабируется, чтобы заполнить экран с точным макетом. Я хочу.

Следует добавить, что внутри этого одного представления макет для всех устройств выглядит одинаково, просто уменьшено/увеличено. Так что на самом деле все сводится к неправильному размеру представления.

Это все происходит ТОЛЬКО с одним из моих представлений, которые я все спроектировал и выложил (ограничения) одинаково. Это происходит КАЖДЫЙ РАЗ, и на симуляторе, и на реальных устройствах.

Я пробовал различные предложения из Интернета на прошлой неделе, и мне не удалось найти ни одной темы (на Stack Overflow), которая могла бы мне помочь.

Я потерялся. Я рад любым предложениям!

Спасибо.


person Dr. Cashberg    schedule 15.03.2017    source источник
comment
Похоже на ошибку Xcode. Вы должны сообщить об этом в Apple.   -  person matt.writes.code    schedule 16.03.2017
comment
@matt.writes.code до сих пор нет ответа от Apple... вы уверены, что это может быть ошибка Xcode? Есть еще идеи, что это может быть?   -  person Dr. Cashberg    schedule 25.03.2017


Ответы (1)


После удаления всего из моего представления шаг за шагом и создания каждого отдельного шага я обнаружил, что у меня есть self.view.layoutIfNeeded() внутри моего viewDidLoad(), который находится внутри блока анимации, анимирующего одно подпредставление, но по какой-то причине приводит к вышеупомянутым проблемам. Удаление решило проблему.

person Dr. Cashberg    schedule 11.04.2017