Dies steht im Zusammenhang mit einer anderen Frage von mir, iOS 8 + interactive transition + nav bar shown = broken?, ist aber anders.Was ist die korrekte Art, Nav-Balken während eines interaktiven Übergangs über NavigationControllerDelegate ein-/auszublenden?
Auf iOS 8, wenn man einen interaktiven Übergang von der Ansicht A tut B über die NavigationControllerDelegate
/UIViewControllerInteractiveTransitioning
Verfahren und Ansicht A zu betrachten, hat eine navbar und Ansicht B, dann nicht, was ist die richtige Methode zu verstecken/die Nav-Leiste ausblenden?
Ich habe versucht, diese in den Viewcontroller wie dies zu tun:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
if (self.navigationController) {
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
NSArray *debugViews = [context containerView].subviews;
NSLog(@"%@", debugViews);
if ([context isCancelled]) {
if(self.navigationController) {
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
}
}];
}
- (void)viewWillDisappear:(BOOL)animated {
[[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
if (self.navigationController) {
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
if ([context isCancelled]) {
if(self.navigationController) {
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
}
}];
[super viewWillDisappear:animated];
}
... aber es gibt zwei große Probleme:
Der Blick (vor allem der navbar) "flackert" manchmal wenn die Animation abgeschlossen ist. Das ist wirklich hässlich, wenn Sie darunter eine komplexe Ansicht haben.
Wenn der Benutzer den interaktiven Übergang abbricht (zB indem er nicht weit genug zieht oder genug kneift), verschwindet die Navigationsleiste für immer, obwohl ich im Code sehen kann, dass es eingeblendet wird.
Hier einiger soure-Code dies zu zeigen: https://github.com/xaphod/UIViewControllerTransitionTut
-> un-Prise von einem View-Controller zu einem anderen zu gehen; Die erste Ansicht hat eine Navigationsleiste, die zweite keine. Wenn Sie den Übergang abgeschlossen haben, können Sie manchmal Flimmern sehen (Problem 1 oben). Wenn Sie nur ein kleines bisschen loslassen und loslassen, ist das ein abgebrochener Übergang: Obwohl Sie immer noch auf Ansicht 1 sind, ist die Navigationsleiste verschwunden (Problem 2 oben).