qix*_*qix 5 uinavigationcontroller ios segue
在自定义segue中,我有以下简单的过渡:
- (void) perform {
UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
[UIView transitionWithView:src.navigationController.view duration:1
options:UIViewAnimationOptionTransitionFlipFromBottom
animations:^{
[src.navigationController pushViewController:dst animated:NO];
}
completion:NULL];
}
Run Code Online (Sandbox Code Playgroud)
内容视图动画很好.但是,在执行动画时,顶部的导航栏有一个混乱的布局(按钮全部塞满左上角,没有标题),只有在动画结束时弹出到位.任何人都知道我做错了什么以及如何解决它?谢谢!
找出我的问题.考虑到UINavigationController如何工作以及与它管理的UIViewControllers交互,原始代码确实是错误的.(像我在OP中所做的那样恼人的东西可以作为旧SO帖子的解决方案.)
这里的代码对我有用(有一个小狡辩):
- (void) perform {
UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
[UIView transitionFromView:src.view
toView:dst.view
duration:1
options:UIViewAnimationOptionTransitionFlipFromBottom
completion:nil];
[UIView transitionFromView:src.navigationItem.titleView
toView:dst.navigationItem.titleView
duration:1
options:UIViewAnimationOptionTransitionFlipFromBottom
completion:nil];
[src.navigationController pushViewController:dst animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
狡辩:这将使导航栏与内容视图分开设置动画,因此您可以翻转两个部分而不是整个屏幕.我原本试图这样做:
[UIView transitionFromView:src.navigationController.view
toView:dst.navigationController.view
Run Code Online (Sandbox Code Playgroud)
但是这失败了因为1)目标的navigationController属性甚至没有设置,直到它被推到导航控制器上,2)即使它是我指的是同一个视图!我忘记了
导航控制器的视图只是其他几个视图的容器,包括导航栏,可选工具栏和包含自定义内容的视图......虽然导航栏和工具栏视图的内容发生了变化,但视图本身也是如此不...导航控制器对象使用与导航堆栈上的视图控制器关联的导航项(UINavigationItem类的实例)动态构建导航栏的内容.要更改导航栏的内容,必须配置自定义视图控制器的导航项.(文档)