【问题标题】:Hiding UINavigationBar and Status Bar issue隐藏 UINavigationBar 和状态栏问题
【发布时间】:2013-03-07 09:20:14
【问题描述】:

我正在尝试隐藏我的 NavigationBar 和状态栏(上滑动画),但遇到了问题。

当状态栏可见时,在 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

【问题讨论】:

  • 你能发一些图片吗?目前还不是很清楚你的问题是什么。你说的“扔掉我的动画”,就是你说的navBar的动画吗?

标签: ios objective-c


【解决方案1】:

您将屏幕细分为 UIView 区域有点混乱。

当您在导航控制器中时,有三个视图:

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

所以导航控制器正在管理它自己的根视图。因为它在顶部用一个 NavigationBar 填充空间,而该区域的其余部分用一个大的 UIView 来填充内容。

当您将 您的 视图控制器推送到导航堆栈时,导航控制器会将 您的根 视图添加为内容。所以你的整个“self.view”完全包含在导航控制器的“内容”视图中。

当然,当导航控制器隐藏导航栏时……“内容”视图会向上扩展以填充空间。然后那个视图告诉你的视图“嘿,空间比你使用的要多,所以你的视图也会向上扩展以完全填满导航控制器的内容视图。

因此,您视图的“0”点始终是您视图的顶部。那永远不会改变。改变的是“视图顶部”相对于屏幕顶部边缘的位置。

如果您希望您的内容在导航栏被移除时保持在屏幕上的同一位置,那么您将不得不考虑这样一个事实,即您的“零”点现在高于有导航栏时的位置向下推内容视图。

【讨论】:

  • 同样适用于 iOS 状态栏:它占用屏幕空间,使其下方的 UIViews 更短。当您删除它时,视图的可用空间会变得更高。旋转会导致所有视图重新布局,因此这可能会触发正在适应的更改。
  • 这正是我正在处理的问题。关于如何管理它的任何建议?我添加了旋转时发生的屏幕截图。也许以某种方式禁用重新布局?我不确定如何检测它何时发生,因为除非我旋转,否则它工作正常......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2017-01-02
相关资源
最近更新 更多