Подтвердить что ты не робот

Ограничения на автоопределение iOS 8/XCode 6, применяемые после просмотра

У меня есть проект, который отлично работает с XCode 5 и iOS 7, но когда я недавно загрузил XCode 6, я заметил какое-то странное поведение с автозапуском.

У меня есть раскадровка с представлением, которое имеет только UIImageView и два UILabels. Это представление загружается с помощью UiPageViewController. UIImageView центрируется по горизонтали и вертикали в представлении, и существуют ограничения, указывающие расстояние между двумя метками от изображения. Когда есть случай, когда конфликтуют раскадровки и значения автоопределения (например, в раскадровке одна метка находится на 20 пикселей выше изображения, но автозапуск говорит, что она должна быть на 40 пикселей выше), обычно было, что значение автоопределения было успешно применяется перед загрузкой представления. Таким образом, когда представление отображается в первый раз, все находится в нужном месте.

Теперь с iOS 8/XCode 6, я вижу, что просмотр загружается, а затем вещи переходят к их окончательной позиции автозапуска. Этот прыжок заметен конечному пользователю как в симуляторе, так и на реальном устройстве, и это действительно раздражает. Есть ли способ вернуться к старому поведению? Насколько мне известно, ни один код не изменился, чтобы вызвать эту проблему.

4b9b3361

Ответ 1

Где ваш код, который вносит изменения в ваши ограничения?

Если вы держите его в viewWillAppear:, у вас будет эта проблема. Я обнаружил, что viewDidLayoutSubviews отлично работает для iOS8, но не всегда для iOS7 назад.

В конце концов, если вы не можете использовать viewDidLayoutSubviews, то я бы предложил скрыть представление контейнера в viewDidLoad и отобразить его в viewWillAppear, только после того, как были применены ограничения. При загрузке экрана вы получаете небольшую дополнительную задержку, но изменение ограничений становится прозрачным для пользователя.

Ответ 2

У меня была аналогичная проблема и помещал элементы в представление контейнера в рамках подготовки к скрытию, а затем показывал их, как было предложено в другом ответе.

Я не любил это как решение и не получал этого.

Просто помещая их в вид контейнера, который был привязан к представлению контроллера, остановил проблему.

Ответ 3

Для меня это проблема с панелью вкладок в моем проекте. В этом я не нуждался в этом, и я спрятал его. Поэтому, когда представление попало в стек, панель была скрыта, и ограничения были соответствующим образом скорректированы. Поэтому я просто вернул панель вкладок.