Строка состояния отображается поверх границ моего представления в iOS 7
Я попытался протестировать свое приложение в iOS 7, а затем обнаружил, что мое представление появляется в строке состояния... Когда я читал, в iOS 7 строка состояния скрыта. Итак, как мне сделать его совместимым для запуска как в iOS 6, так и в iOS 7? Должен ли я создавать разные .xib файлы для разных версий iOS для каждого экрана?
Я читал это:
Если обе версии стандартного приложения должны иметь аналогичный макет, используйте "Автоматический макет" для создания пользовательского интерфейса, который корректно работает в обеих версиях iOS. Чтобы поддерживать несколько версий iOS, укажите один набор ограничений, которые Auto Layout может использовать для настройки представлений и элементов управления в файлах раскадровки или XIB (чтобы узнать больше о ограничениях, см. "Ограничения на соответствие отношениям между представлениями" ).
Если обе версии стандартного приложения должны иметь аналогичный макет, и вы не используете Auto Layout, используйте смещения. Чтобы использовать смещения, сначала обновите пользовательский интерфейс для iOS 7. Затем укажите значения, которые определяют начало, высоту и ширину каждого элемента в более раннем пользовательском интерфейсе в качестве смещений из новой позиции элементов в iOS 7 UI.
Но когда я использую autolayout в .xib, он показывает ошибку, что автозапуск находится в предыдущей версии iOS 6.
Как исправить эту проблему?
Ответы
Ответ 1
iOS 7, по-видимому, поддерживает отображение строки состояния для некоторых видов, но не для других. Чтобы скрыть его для всех видов, выполните следующие действия:
- Убедитесь, что
Hide during application launch
по-прежнему отмечен, чтобы поддерживать предыдущие версии ОС.
- В вашем файле Info.plist добавьте
View controller-based status bar appearance
и установите его в NO
.
- Возможно, вам понадобится "Очистить" перед созданием (я сделал), но тогда ваше приложение должно работать по-прежнему: никакая строка состояния не висит над вашими взглядами!
Ответ 2
Вероятно, вам нужно добавить следующий код на каждый контроллер представления.
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else
{
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this method
- (BOOL)prefersStatusBarHidden {
return YES;
}
Ответ 3
У меня такая же проблема. Пока я сделал два взлома и решит, с чем поеду:
- Вы можете полностью скрыть строку состояния, установив для параметра
UIStatusBarHidden
и UIViewControllerBasedStatusBarAppearance
значение true.
- В моем приложении я создал ограничение Top Spacing со значением 0, и я программно изменил его на 20, если обнаружил, что приложение работает на iOS 7.
Как сделать учетную запись Autolayout для области состояния?
Ну, я понял это.
В вашем подзадаче (BRSMyListSubViewController
в моем случае), в viewDidLoad
, вам нужно установить один из этих двух
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
ИЛИ
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;
Интересно, что в контроллере корневого представления эти значения установлены по умолчанию UIRectEdgeAll
, NO
и YES
соответственно, но его tableView
НЕ находится под навигационной панелью и нижним колонтитулом.
Я не знаю, почему это так нелогично.
Также странно, что edgesForExtendedLayout
следует смешивать с одним из двух других свойств, хотя он явно ответственен за поведение.
Ответ 4
Если вы хотите показать строку состояния в разделе iOS 7 с Xcode 5, просто измените порядок кнопок и других подзаголовков, чтобы сделать достаточно места вокруг строки состояния. Но, подождите! Мне тоже нравится iOS 6. Как это сделать?
Я нашел документацию из Apple и нашел в документе название "Поддерживая два варианта стандартного приложения".
Если вы редактируете файл XIB, выберите его и нажмите редактор помощников. Там вы сможете найти "ручное, автоматическое...". Затем выберите "предварительный просмотр".
![Enter image description here]()
Затем вы найдете макет вида бок о бок. Затем вы заметите, что есть кнопка всплывающего окна в правой нижней части правой панели (вид); он говорит "iOS 7 и более поздние". Вы можете выбрать "iOS 6.1 и более ранние версии". Woa! Теперь вы можете внести коррективы для iOS 6.1, не влияя на расположение iOS 7.
![Enter image description here]()
Если вы работаете над раскадрой, это в основном то же самое. Вы выбираете объект контроллера вида и выбираете режим помощника редактора, выбираете "предварительный просмотр", затем "iOS7 и более поздние"... Bluh Bluh Bluh.
Я не уверен, но только помощник-редактор может переключиться на iOS 7 +/iOS 6- mode. Я только что нашел это совсем недавно, поэтому, пожалуйста, укажите, есть ли какие-либо недоразумения или другие трюки.
Ответ 5
Нет необходимости создавать multi-xib. Я думаю, что ваша проблема - "20px": тот же XIB файл отлично смотрится в iOS 6, но он пропускает 20 пикселей в iOS 7.
Например, у вас есть представление, и оно Y = 0. В iOS 6 оно находится рядом со строкой состояния. В iOS 7 он отображается в строке состояния.
Вы должны использовать Xcode 5, чтобы открыть XIB файлы и включить помощник-редактор. Выполните следующие действия:
Ответ 6
Вам просто нужно проверить свой основной размер UIView для iOS 7.0 и более поздних версий и iOS 6.0 и ниже, возможно, вы получите представление.
Из iOS 7 Apple изменил размер основного вида = исправлено. Это означает, что если вы добавили панель навигации, на вкладке размер вашего просмотра останется таким же [iPhone 4s: 320 * 480, iPhone 5: 320 * 568].