Есть некоторые проблемы с макетом безопасной области и обратной совместимостью. См. мой комментарий по здесь.
Возможно, вы сможете обойти проблемы с помощью дополнительных ограничений, таких как приоритет 1000 >= 20.0 для superview.top и приоритет 750 == safearea.top. Если вы всегда показываете строку состояния, это должно исправить ситуацию.
Лучшим подходом может быть создание отдельных раскадровок/xib для версий до iOS 11 и iOS-11 и выше, особенно если вы сталкиваетесь с большим количеством проблем. Причина, по которой это предпочтительнее, заключается в том, что в версиях до iOS 11 вы должны размещать ограничения по верхним/нижним направляющим макета, но для iOS 11 вы должны размещать их в безопасных областях. Направляющие макета исчезли. Разметка по макетам для версий до iOS 11 стилистически лучше, чем простое смещение минимум на 20 пикселей, даже если результаты будут такими же, если вы всегда показываете строку состояния.
Если вы выберете этот подход, вам нужно будет установить для каждого файла правильную цель развертывания, на которой он будет использоваться (iOS 11 или что-то более раннее), чтобы Xcode не давал вам предупреждений и позволял вам использовать руководства по макету или безопасные зоны, в зависимости. В своем коде проверьте наличие iOS 11 во время выполнения, а затем загрузите соответствующую раскадровку/xibs.
Недостатком этого подхода является обслуживание (у вас будет два набора ваших контроллеров представления для поддержки и синхронизации), но как только ваше приложение поддерживает только iOS 11+ или Apple исправит генерацию ограничений руководства по макету обратной совместимости, вы можете получить избавиться от версий до iOS 11.
Кстати, как вы показываете контроллер, с которым вы это видите? Это просто контроллер корневого представления или вы его представили, или..? Проблема, которую я заметил, связана с нажатием контроллеров представления, поэтому вы можете столкнуться с другим случаем.
person
clarus
schedule
21.09.2017