2013-03-07 153 views
0

我试图隐藏我的NavigationBar和状态栏(向上滑动动画),我遇到了问题。隐藏UINavigationBar和状态栏问题

当状态栏可见时,位于0点(x:0)的每个元素的原点指的是在状态栏的正下方。但是,状态栏处于隐藏状态时,0(x:0)点更新以容纳新空间,0(x:0)表示绝对顶部。

当我隐藏状态栏,并旋转到景观,视图自动调整大小,一切都转移到使用状态栏的空间,并引发了我的动画:

if (![[UIApplication sharedApplication] isStatusBarHidden]) { 
      // Change to fullscreen mode 
      // Hide status bar and navigation bar 
      [[UIApplication sharedApplication] setStatusBarHidden:YES 
                withAnimation:UIStatusBarAnimationSlide]; 
      [UIView animateWithDuration:animationDuration animations:^{ 
       navBar.frame = CGRectMake(navBar.frame.origin.x, 
              -navBar.frame.size.height-20, 
              navBar.frame.size.width, 
              navBar.frame.size.height); 
      } completion:^(BOOL finished) { 
       [navBar setHidden:TRUE]; 
      }]; 
     } else { 
      // Change to regular mode 
      // Show status bar and navigation bar 

      [navBar setHidden:FALSE]; 

      [[UIApplication sharedApplication] setStatusBarHidden:NO 
                withAnimation:UIStatusBarAnimationSlide]; 
      [UIView animateWithDuration:animationDuration animations:^{ 
       navBar.frame = CGRectMake(navBar.frame.origin.x, 
               0, 
               navBar.frame.size.width, 
               navBar.frame.size.height); 
      } completion:^(BOOL finished) { 

      }]; 
     } 

有什么建议?

编辑:这里的屏幕看起来像旋转的重新布局后:Image

+1

你能张贴一些图片吗?不清楚你的问题是什么。当你说“抛弃我的动画”时,你说的navBar的动画是什么? – applefreak 2013-03-07 09:26:36

回答

1

你混淆屏幕划分成区域的UIView一点点。

当您在导航控制器的时候,有三个观点:

  • 导航控制器的“根”的观点
  • 里面的是,导航栏(这当然是一个UIView
  • 也在里面导航控制器,“内容区域”视图

因此,导航控制器正在管理它自己的根视图,因为它正在用顶部的NavigationBar填充空间,并且re与一个大UIView的内容的区域的st。

当按下视图控制器送到导航堆叠,所述导航控制器被添加视图作为内容。因此,您的整个“self.view”完全包含在导航控制器的“内容”视图中。

所以,当然,当Nav控制器隐藏导航栏...“内容”视图扩大到填补空间。然后这个观点告诉视图“嘿,还有更多的空间比您正在使用这样观点也膨胀到完全填充导航控制器的内容视图。

所以你的观点的‘0’点始终您的视图的顶部,它永远不会改变,“视图的顶部”相对于屏幕的顶部边缘在哪里发生变化

如果您希望您的内容在导航栏中保留在屏幕上的相同位置被删除,那么你将不得不说明,你的“零”点现在高于导航栏推动内容视图时的高点。

+0

同样适用于iOS状态栏:它占用屏幕空间,使UIView下面的空间更短。当您移除它时,视图的可用空间会变得更高。旋转会导致所有视图重新布局,因此可能会触发正在进行调整的更改。 – 2013-03-07 11:12:40

+0

这正是我正在处理的问题。有关如何管理它的任何建议?我添加了一个关于旋转发生的截图。也许禁用重新布局?我不知道如何检测它何时发生,因为除非我旋转,否则它工作正常。 – mattsven 2013-03-07 15:20:45