У меня есть UINavigationController
с видимой панелью навигации.
У меня есть один конкретный UIViewController
, который я хотел бы скрыть строку состояния при нажатии в стек навигации. Как только этот viewController выскочил, я хотел бы снова показать строку состояния.
Я скрываю панель в методе viewWillAppear
моего UIViewController
следующим образом:
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
Заметьте, что я устанавливаю setWantsFullScreenLayout:YES
здесь для ясности, но на самом деле я просто устанавливаю это свойство в Interface Builder.
Проблема: Панель навигации NavigationController не перемещается вверх, чтобы занять пространство скрытой строки состояния.
Хакерное решение Единственное, что я нашел, которое работало, чтобы обновить позицию навигационной панели, было скрыть ее и показать ее снова, например:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
но это явно взломать, там должен быть лучший способ.
Другие вещи, которые я пробовал:
-
Я попытался вызвать
[super viewWillAppear]
после скрытия строки состояния, то есть в конце моего метода. -
Я попробовал setNeedsLayout на navigationController.view вот так:
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES]; [self.navigationController.view setNeedsLayout];
но это не работает.
Любая помощь оценивается. Благодаря