viewWillDisappear:animated
по сути является любезным уведомлением. Это просто говорит вам, что неизбежно, прежде чем это произойдет. Вы не можете фактически заблокировать или задержать исчезновение вида.
Лучшим решением было бы создать категорию на UINavigationController
, которая создает такие методы, как (не проверено):
- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated {
[UIView transitionWithView:viewController.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationCurveEaseOut
animations:^{
[self.navigationController setNavigationBarHidden:NO];
}
completion:^(BOOL finished){
NSLog(@"animation finished");
[self pushViewController:viewController animated:animated];
}];
}
- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated {
[UIView transitionWithView:self.visibleViewController.view
duration:UINavigationControllerHideShowBarDuration
options:UIViewAnimationCurveEaseOut
animations:^{
[self.navigationController setNavigationBarHidden:YES];
}
completion:^(BOOL finished){
NSLog(@"animation finished");
[self popViewControllerAnimated:animated];
}];
}
Вы могли бы затем вызывать их вместо
- (void)pushViewControllerAfterAnimation:(UIViewController *)viewController animated:(BOOL)animated
и
- (void)popViewControllerAfterAnimationAnimated:(BOOL)animated
соответственно.