Показать/скрыть навигациюБар, когда представление перетаскивается в iOS 8
Привет, коллеги-разработчики,
Я удивлен, что я не нашел никакой информации об этом конкретном случае использования для iOS 8. Позвольте мне объяснить, у меня есть стек контроллера навигации, первое представление имеет скрытую навигацию, когда пользователь нажимает на ячейку новый вид нажат, и мне нужно, чтобы панель навигации, показанная на этом представлении, возвращалась (очевидно). На iOS 7 это просто вопрос добавления этой строки в viewWillAppear:
[self.navigationController setNavigationBarHidden:NO animated:YES];
И это работает как шарм. Но с IOS 8 я изо всех сил стараюсь иметь такое же поведение. На данный момент мне удалось сделать то же самое, используя:
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
- (void)viewDidLoad {
[super viewDidLoad];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
self.automaticallyAdjustsScrollViewInsets = NO;
self.edgesForExtendedLayout = UIRectEdgeNone;
self.collectionView.contentInset = UIEdgeInsetsMake(self.navigationController.navigationBar.frame.size.height, 0, 0, 0);
} }
И изменение содержимогоИнтеллекция моих коллекцийView/tableviews, что мне нужно отображать. Он будет работать, но это настоящая боль в * (иногда вставка содержимого не требуется, если пользователь приходит из нового диспетчера представлений).
Для контекста проект был впервые разработан для обработки iOS 6 и 7, поэтому никакой раскадровки не делается программно. Я портировал приложение на более современную кодовую базу и сделал ее универсальной.
Я что-то упустил? Есть ли лучший способ справиться с этим в iOS 7/8?
Ответы
Ответ 1
Вы хотите скрыть его в viewWillAppear
и снова показать его в viewWillDisappear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.isHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.isHidden = false
}
Ответ 2
Я думал, что строка:
self.navigationController.navigationBar.hidden = YES;
Я проверяю его, и он отлично работает для меня.,
Попробуй.,.
Ответ 3
Сделайте это анимированным, чтобы получить плавный переход:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
Ответ 4
В iOS 8
кажется, что navigationBarHidden
не совпадает с navigationBar.hidden
.
(Я создаю цель развертывания iOS 6
- не уверен, что это имеет значение).
В моем коде, глядя на отладчик со следующими последовательными строками:
bool b1 = self.navigationController.navigationBarHidden; // FALSE
bool b2 = self.navigationController.navigationBar.hidden; // TRUE
b1
отображается как false и b2
как истина.
Настройка self.navigationController.navigationBar.hidden = false
решает проблему
Ответ 5
У меня была такая же проблема, и я действительно пробовал все, но панель навигации не отображалась. Наконец, я понял, что у меня есть этот код в моем первом контроллере представления: -)
[self.navigationController setNavigationBarHidden:YES];
Я подумал, кто-то другой, который проверяет этот вопрос, допустил мою ошибку, поэтому я подумал, что это может стоить упоминать.