您好! 在我的应用程序中,我使用自定义转换。并且以这种方式可能发生一种情况,然后app引发了异常:
UINavigationController的开始/结束外观转换的非平衡调用“。
我通过覆盖UINavigationController
的push / pop / set方法并采用协议UINavigationControllerDelegate
解决了这种情况。这个解决方案允许我将转换块放入数组,称为“堆栈”,并逐个调用它们。我实现了这两种方法:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
@synchronized (self.stack) {
self.transitioning = YES;
if ([navigationController.topViewController respondsToSelector:@selector(transitionCoordinator)]) {
id <UIViewControllerTransitionCoordinator> transitionCoordinator = [navigationController.topViewController transitionCoordinator];
[transitionCoordinator notifyWhenInteractionEndsUsingBlock:^(id <UIViewControllerTransitionCoordinatorContext> context) {
if ([context isCancelled]) {
@synchronized (self.stack) {
self.transitioning = NO;
}
}
}];
}
}
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
@synchronized(self.stack) {
self.transitioning = NO;
[self runNextBlock];
}
}
我的应用程序支持三种界面方向:纵向,横向左侧和横向右侧。有些UIViewControllers
使用纵向方向,有些使用横向(左/右)方向。我有两个导航控制器。一个导航控制器(带有纵向视图控制器)以模态方式显示另一个导航控制器(带有横向视图控制器)。
如果我以另一个界面方向显示视图控制器,则在8.0之前的iOS版本上没有调用委托方法navigationController:didShowViewController:animated:
。
解决此问题的任何解决方案?