Новая строка состояния iOS 7 оставляет диапазон 20 пикселей в приложениях, скомпилированных в Xcode 5

На этой неделе вышла бета-версия iOS 7, и всякий раз, когда выходит обновление, им всегда нужно обновлять приложения для совместимости, чтобы избежать некоторых ошибок.

Что ж, я установил iOS 7 на свой iPhone, и в принципе приложения работали отлично, затем установил Xcode 5 (предварительный просмотр) и скомпилировал свои проекты, я понял, что новый статусбар теперь совершенно спокоен, ваш контроллер представления будет отображаться как ее фон.

Вот тут и возникает проблема, белая полоса 20px внизу экрана из-за того, что контроллер представления отвоевал место, которое когда-то было статусбаром.

Если я исправлю эту проблему в своих раскадровках, то все в порядке, но тогда проблема в iOS 6 из-за 20px statusBar там все еще есть, и экран будет обрезан.

Я думал, что простым решением будет проверить версию iOS при запуске и создать раскадровку в соответствии с каждой из них. В моем проекте у меня есть 3 раскадровки: iPhone 3.5, iPhone 4 и iPad. Вскоре придется создать еще 3 раскадровки, так как эти 20 px.

Это было бы лучшим решением? У меня есть другая альтернатива?

Извините за длинный текст. Любая помощь приветствуется!


person jucajl    schedule 14.06.2013    source источник
comment
Используйте автоматическую компоновку или хотя бы пружины и стойки, и у вас не будет таких проблем.   -  person Marcus Adams    schedule 15.06.2013
comment
На самом деле это не бета-версия, это предварительный просмотр для разработчиков.   -  person Abizern    schedule 15.06.2013
comment
UINavigationController автоматически регулирует зазор в 20 пикселей. Если вы не используете UINavigationController, вы можете справиться с пробелом в коде.   -  person Hai Feng Kao    schedule 26.07.2013
comment
Если у кого-то есть решение или у вас есть какие-либо альтернативы, пожалуйста, обновите здесь...   -  person    schedule 12.08.2013
comment
Эта ссылка содержит интересную информацию по этому вопросу: doubleencore.com/2013/09/   -  person lucasart    schedule 25.09.2013


Ответы (1)


На самом деле это исправление старой ошибки. Ранние версии Xcode неправильно обрабатывали строку состояния, поэтому люди устанавливали параметр Y окна равным нулю. Правильным значением будет 20, вертикальная толщина строки состояния.

Я смутно припоминаю, что в Interface Builder также есть параметр, который позволяет указать, что строка состояния должна присутствовать, что добавит 20 к параметру Y. Это тоже не работало правильно.

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

Консенсус на форумах разработчиков Apple заключается в том, что Apple добавит способ указать поведение iOS6 по сравнению с iOS7 в Interface Builder, чтобы решить эту проблему.

person Cliff Harris    schedule 15.06.2013
comment
Есть ли способ, которым приложение выглядит нормально как для iOS 6, так и для iOS 7? Нужно решение. Пожалуйста помоги. - person ; 12.08.2013
comment
Ankit, вы всегда можете проверить версию iOS во время выполнения, а затем соответствующим образом установить параметр y окна. - person Ben Baron; 20.08.2013
comment
Я не думаю, что это будет правильный выбор. Нужно найти стандартное решение. Не знаю, почему Apple не позаботилась об этом.. :( - person Srinivas G; 23.09.2013
comment
Использование этого сработало для меня на 100%. - (void) viewDidLayoutSubviews { CGRect viewBounds = self.view.bounds; CGFloat topBarOffset = self.topLayoutGuide.length; viewBounds.origin.y = -topBarOffset; self.view.bounds = viewBounds; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; } и добавьте и установите флаг отображения строки состояния на основе контроллера View в значение no в plist. - person YSR fan; 24.09.2013
comment
я нашел это так: строка состояния обратно в стиль ios 6"> stackoverflow.com/questions/18294872/ - person İbrahim Özbölük; 25.09.2013
comment
Для iPhoneX высота 44, а не 20. - person Musa almatri; 13.09.2017