隐藏导航栏移动视图“向上”

时间:2013-10-23 15:04:01

标签: ios7

通常的故事 - 我正在iOS 7下运行iOS 5/6应用程序并且导航栏行为更改导致问题。

该应用程序已经像iOS 7默认一样工作,全屏视图和半透明导航栏“视图”。问题是隐藏/取消隐藏导航栏会导致iOS 7中出现不同的行为。在iOS 5/6上隐藏/取消隐藏导航栏不会更改视图。在iOS 7上,隐藏栏可视地向上移动视图,在屏幕底部留下一个空白栏,取消隐藏栏将视图向下移动以占据整个屏幕(当然,导航栏位于顶部)。

我需要继续支持iOS 5,所以我不使用自动布局,但我确实使用全屏。 我有一个视图,我正在查看可缩放的图像 - 所以视图控制器有一个全屏视图,其中包含一个包含imageView的scrollView。

状态栏始终隐藏。

我通过导航控制器进入视图控制器,因此有一个(黑色,半透明)导航栏位于我的全屏视图/ scrollView / imageView的顶部。

短暂延迟后,一些重叠标签会消失,导航栏会隐藏 单击即可恢复叠加标签并取消隐藏导航栏。 这适用于iOS 5/6 - 导航栏滑出屏幕顶部,露出视图/图像的顶部。

在iOS 7上,当导航栏滑出屏幕顶部时,整个视图在视觉上向上移动相应的量(即44点),在屏幕底部留下黑条。我可以通过在顶层视图上设置背景颜色并调整scrollview的大小来查看背景来看到这一点。视图的顶部确实在屏幕外移动,背景颜色不会在屏幕的底部(44点)上绘制。

但是,self.view.frame不会改变并保持在{0,0} 320 x高度。

当我单击以恢复叠加信息和导航栏时,视图向下移动以占据整个屏幕,半透明导航栏位于视图/图像的顶部。

我尝试过的任何内容都没有改变行为: 更改IB视图控制器布局控件(在顶部栏下,在底栏下,调整​​滚动视图插图)。在7.0以下运行时,5.1,6.1和7.0的构建都会产生相同的结果。

self.edgesForExtendedLayout = UIRectEdgeNone

什么都不做。使用布局增量值不会执行任何操作。在IB中,当“被视为”iOS 7和iOS 6及更早版本时,视图看起来相同。我打印出很多调试信息,但当视图移动到“屏幕外”时,视图(或滚动视图)似乎没有任何变化。

显示叠加信息的代码(首次显示视图时和单击时运行):

- (void) showOverlayInfo {
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    [[[self navigationController] navigationBar] setTranslucent:YES];
    [[self navigationController] setNavigationBarHidden:NO animated:NO];    

    overlayInfoHidden = NO;
    overlayInfoFading = NO;
    self.infoButton.hidden = NO;
    self.infoButton.alpha = 1;
    self.descriptionLabel.hidden = NO;
    self.descriptionLabel.alpha = 1;
}

隐藏叠加信息的代码是:

- (void) hideOverlayInfo {
    overlayInfoHidden = YES;
    overlayInfoFading = NO;
    self.infoButton.hidden = YES;
    self.descriptionLabel.hidden = YES;
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}

那么有人能告诉我我错过了什么(大概是简单的)吗?

1 个答案:

答案 0 :(得分:11)

我终于找到了问题。

关键的事实是图像查看器视图控制器位于UIPageViewController中, 所以我正在寻找并尝试的实际上是“内部”另一个视图控制器。 虽然我已经为图像查看器VC禁用了视图控制器设置调整滚动视图插入,但我还没有为创建UIPageViewController的包含VC创建它,而UIPageViewController在一些子类中显示了页面UIScrollView的。当我为父VC更改它们时,问题就消失了。

所以我认为这个故事的寓意是:

  • 当本地不起作用时,更全局地思考问题,因为可能你错过了一些重要的背景。
  • 如果您不想使用iOS 7的行为,请更改您拥有的每个视图控制器的设置!
相关问题