Ответ 1
Вы можете использовать [navigationController setNavigationBarHidden: YES animated:YES]
, чтобы скрыть панель плавно
У меня есть приложение на основе навигации. Первый вид (rootcontroller) начинается только с трех больших кнопок. Нет навигационной панели. Оттуда все остальное - это таблицы и имеют навигационные панели. Я делаю это, чтобы показать/скрыть панель навигации:
MyAppAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.navigationController.navigationBar.hidden = NO;
Как только я уйду из корневого контроллера, панель навигации подпрыгнет на место и встанет поверх таблицы, вместо того, чтобы отталкивать ее. Он зажимает верхнюю часть таблицы. Возврат к корневому контроллеру не является гладким в том, как панель навигации исчезает. Есть ли более гладкий/лучший способ выполнить скрытие панели навигации только для корневого контроллера?
Вы можете использовать [navigationController setNavigationBarHidden: YES animated:YES]
, чтобы скрыть панель плавно
Этот отличный фрагмент кода оживляет скрытую панель навигации без проблем пользовательского интерфейса:
[navigationController setNavigationBarHidden: YES animated:YES]
Вы можете настроить анимацию и продолжительность панели навигации следующими способами. Он предоставит вам обратный вызов после завершения анимации.
// pass a param to describe the state change, an animated flag and a completion block matching UIView animations completion
- (void)setNavigationBarVisible:(BOOL)visible animated:(BOOL)animated completion:(void (^)(BOOL))completion {
// fail if the current state matches the desired state
if ([self navigationBarIsVisible] == visible) return completion(YES);
// get a frame calculation ready
CGFloat nheight = self.navigationController.navigationBar.frame.size.height;
CGFloat noffsetY = (visible)? -nheight : nheight;
// zero duration means no animation
CGFloat duration = (animated)? 0.3 : 0.0;
[UIView animateWithDuration:duration animations:^{
CGRect nframe = self.navigationController.navigationBar.frame;
self.navigationController.navigationBar.frame = CGRectOffset(nframe, 0, noffsetY);
} completion:completion];
}
// know the current state of the navigation bar
- (BOOL)navigationBarIsVisible {
return self.navigationController.navigationBar.frame.origin.y < CGRectGetMinY(self.view.frame);
}
// Show or Hide navigation bar
[self setNavigationBarVisible:![self navigationBarIsVisible] animated:YES completion:^(BOOL finished) {
NSLog(@"navigation bar finished");
}];