隐藏导航栏移动视图"向上"

Cha*_*ice 8 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
Run Code Online (Sandbox Code Playgroud)

什么也没做.使用布局增量值不会执行任何操作.在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;
}
Run Code Online (Sandbox Code Playgroud)

隐藏覆盖信息的代码是:

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

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

Cha*_*ice 11

我终于找到了问题.

关键的事实是图像查看器视图控制器位于UIPageViewController中,因此我正在查看和试验的内容实际上是"内部"另一个视图控制器.虽然我已经禁用了图像查看器VC 的视图控制器设置调整滚动视图插图,但是我还没有为创建UIPageViewController的包含VC创建它,而UIPageViewController在UIScrollView的某个子类中显示页面.当我为父VC更改它们时,问题就消失了.

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

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