Безопасная область iOS 9 Верхнее ограничение xib и раскадровки отличается

На iOS 9, iPhone 5, не происходит на iOS 10 и более поздних версиях

UIViewController создать из раскадровки, я установил красный viewView viewController's view.top равняется верхней части безопасной области, красный вид находится чуть ниже statusBar.

Если создать viewController из файла XIB, используйте init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) а также установите красный вид subView view.top равным верху безопасной области, красный вид находится в той же origin.y, что и statusBar. Как показано ниже:

ViewControllers, создаваемые из раскадровки, и xib - это один и тот же класс, возможно, create из раскадровки и xib имеют разные настройки, я пытаюсь отменить выбор всех опций выбора раскадровки, но не нашел того, который имеет значение.

Кто-нибудь может это объяснить? Спасибо!

Репо для этого вопроса: https://github.com/codingingBoy/SafeAreaDemo.

1 ответ

Решение

Существуют проблемы обратной совместимости с XIB и руководствами Safe-Area со старыми версиями iOS, поскольку в файлах XIB их не было.

В текущем поведении обратного развертывания Xib (iOS 10 и более ранних) ограничение на безопасную область будет преобразовано в суперпредставление, потому что XIB не имеет верхних и нижних направляющих макета.

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

1) переместите представление и макет в контроллер представления раскадровки

2) использовать выходы IB с соответствующими (верхним и нижним) ограничениями и программно заменять их ограничениями для верхнего / нижнего руководства по компоновке после установки представления

3) установить вид как подпредставление и программно добавить ограничения к верхним / нижним направляющим и сторонам макета.

Ссылка: https://forums.developer.apple.com/thread/87329

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