2

我已经实现了一个容器视图控制器(ios5),现在我试图实现自定义动画/转换切换视图控制器。加载视图时导航栏跳转

但是在实现涉及UINavigationController的任何动画时,我遇到了一个问题,结果与预期不符。例如,如果我使用导航栏显示控制器时从左侧动画执行翻转操作,则导航栏的位置会保持在原始位置下方44像素处,并且在执行动画后,导航栏将平稳移动到原来的位置,丑...

这发生在我执行的每一个动画,所以我想它只能与导航控制器相关。

这是我使用的翻盖过渡

[self transitionFromViewController:fromViewController 
       toViewController:toViewController 
         duration:1.0 
         options:UIViewAnimationOptionTransitionNone 
         animations:^{ 
         [UIView beginAnimations:@"animation2" context:nil]; 
         [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
         [UIView setAnimationDuration: 0.7]; 
         [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:containerView cache:NO]; 
         [UIView commitAnimations]; 
         } 
         completion:^(BOOL finished) { 
         [toViewController didMoveToParentViewController:self]; 
         [fromViewController removeFromParentViewController]; 
         }]; 

代码我也试过以下

[self transitionFromViewController:fromViewController 
       toViewController:toViewController 
         duration:1.0 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:^{ 
         } 
         completion:^(BOOL finished) { 
         [toViewController didMoveToParentViewController:self]; 
         [fromViewController removeFromParentViewController]; 
         }]; 

回答

0

设置根据iPhone或iPad的和它的方向是这样的纵向导航栏架in iphone

[self.navigationController.navigationBar setFrame:CGRectMake(0, 20, 320, 44)]; //for iphone simarly for ipad and its orientation 

您需要将导航栏框更改为其从状态栏的实际位置,即加20

+0

我忘了评论整个内容是向上移动的,所以如果我设置了导航栏框架,内容视图仍然会移动。我试图设置两个框架(导航栏和内容视图),但只有导航栏移动到原始位置。 – CSharpLearning

+0

我刚刚检查了导航栏的框架及其在viewDidLoad和viewWillAppear(x = 0,y = 0)中的正确位置。即使导航栏从y =状态栏高度移动到y = 0 ...奇怪... – CSharpLearning

+0

在导航栏中添加y = 20将其设置正确 –

0

我也有类似的问题NavigationControllerContainer controller。实际上它是窗口底部的工具栏。我的解决方案是首先隐藏工具栏,然后在主过渡完成后用动画显示工具栏。它看起来像整个动画的一部分。

这是我如何隐藏和显示工具栏:

[toNavController setToolbarHidden:YES]; 
[self transitionFromViewController:fromViewController 
       toViewController:toNavController 
         duration:1.0 
         options:UIViewAnimationOptionTransitionFlipFromLeft 
         animations:^{ 
         } 
         completion:^(BOOL finished) { 
         [toNavController didMoveToParentViewController:self]; 
         [fromViewController removeFromParentViewController]; 

         [toNavController setToolbarHidden:NO animated:YES]; 
         }]; 
0

在viewDidLoad中设置frame.origin.y为1。您仍然有一个跳跃,但与1个像素。