Панель навигации iOS 7 Скрытие содержимого
У меня есть приложение, которое было разработано в iOS 6. Но теперь в iOS 7 или даже моем приложении, скомпилированном для iOS 6, но запущенном на устройстве iOS 7 верхняя панель навигации (новая гигантская в iOS 7), мой контент скрыт. Верхняя панель навигации закрывает его. Если я вручную переместил его с помощью CGRect, он выглядит хорошо в iOS 7, но теперь iOS 6 выглядит ужасно (на много места над ним).
Приложение было построено с автоматическим отключением, так как автозапуск - это способ для правильной настройки.
Мой вопрос: есть ли простой способ переместить контент для iOS 7? Я действительно не хочу, чтобы снова включить автозапуск и потратить месяц, пытаясь вернуть все элементы интерфейса. Приложение довольно сложное с 30 + экранами и большим количеством анимационных просмотров на экранах.
Ответы
Ответ 1
Я думаю, что в этом вопросе макета еще немного заблуждений, даже если iOS 7 был выпущен более года назад. Поэтому я в конечном итоге решил продолжить дальнейший ответ.
Вот что.
Поскольку automaticallyAdjustsScrollViewInsets
'значение по умолчанию YES
, довольно простое решение может добавить следующий код:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { // if iOS 7
self.edgesForExtendedLayout = UIRectEdgeNone; //layout adjustements
}
в метод ViewController -viewDidLoad
.
Если вы хотите удалить строку состояния (из-за прозрачности штриха, так что это не странно), добавьте self.navigationController.navigationBar.translucent = NO
. Значение по умолчанию YES
.
Примечание: это не имеет никакого отношения к контенту, это связано с содержанием из-за прозрачности, но это совсем другая история!
Поскольку extendedLayoutIncludesOpaqueBars
по умолчанию NO
, self.navigationController.navigationBar.translucent = NO
означает в основном наличие
self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeRight| UIRectEdgeBottom;
Или, в общем, что-то вроде этого (это как псевдокод, чтобы дать идею...)
BOOL enableTopEdge = extendedLayoutIncludesOpaqueBars && !navigationBarIsTranslucent
self.edgesForExtendedLayout = (enableTopEdge & UIRectEdgeTop) | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom;
Ответ 2
Вы также можете попробовать установить navigationBar.translucent = NO
, как было упомянуто в этот ответ.
Ответ 3
Чтобы скрыть панель навигации, добавьте в свой UIViewController следующее:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Hide the top navigation bar.
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
self.navigationController.navigationBar.shadowImage = [UIImage new];
self.navigationController.navigationBar.translucent = YES;
}
Чтобы показать панель навигации, используйте следующее:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Show the top navigation bar.
self.navigationController.navigationBar.translucent = NO;
}
Ниже приведены результаты на iOS7:
![Navigation bar is hidden.]()
![Navigation bar is shown.]()
Снимок экрана слева со скрытой навигационной панелью, а изображение справа - с отображаемой навигационной панелью - содержимое таблицы правильно скрыто под панелью навигации.
Надеюсь, это поможет!
Ответ 4
Put self.edgesForExtendedLayout = UIRectEdgeNone;
в вашем методе ViewDidLoad