Страницы

Поиск по вопросам

понедельник, 29 октября 2018 г.

Status Bar в iOS 7

Наверняка, если вы уже сталкивались с iOS 7, вы понимаете, о чем идет речь:
В iOS7 похоже изменилась система отсчета у view-объектов, и если запустить проект, работающий нормально в iOS <= 6.1, в iOS 7, его контент будет выводиться поверх прямо статус бара (на всякий случай "статус бар" - это где часы, вай-фай, моб. оператор...), а внизу будет пустая полоса 20px. То есть как будто бы views стали отсчитываться с (0, 0) экрана, а не как раньше с (0, 20).
На SO на этот счет внятных ответов я не нашел, так как там все вопросы про iOS 7 минусуют и закрывают, и говорят, что нужно идти на Apple forums. Единственное, что я нашел это вот этот неубедительный ответ, который опять же ссылаясь на Apple forums, утверждает, что прежнее поведение отсчета views с 20 пикселей является "an old bug" и что нынешнее поведение "is actually a fix". На самих форумах Apple тоже внятной информации с точным решением я пока не нашел.
Я прочитал iOS7 UI Transition guide, и видел, что
In iOS 7, view controllers use full-screen layout.
но мне интересно (внимание, вопрос!), можно ли с помощью кода сохранить старое поведение предыдущих версий iOS и в версии iOS 7.0? Изменение разных параметров, которые Apple описывает в этом гайде, не дало мне нужного, даже приблизительно, результата.
Примечание: я имею в виду поведение проектов, написанных руками, без использования Storyboards.


Ответ

Я в своё время нашёл решение для своего вопроса, и так и не собрался оформить его здесь в виде ответа. Не очень удобное, но работающее самым надёжным из всех возможных образом. Кратко: я завернул view-иерархию каждого контроллера в ещё один UIView *compatibilityContainerView, который и выполнял необходимое мне позиционирование. В одной из ссылок на эту тему: Wrestling with Status Bars and Navigation Bars on iOS 7 этот способ описан под цифрой 9. Теперь же похоже это постепенно становится неактуальным, так как Apple говорит нам в принудительном порядке адаптировать приложения под iOS 7: С 1 февраля 2014 все новые приложения должны быть адаптированы под iOS7

Комментариев нет:

Отправить комментарий