Панель навигации 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