通常的故事——我正在制作一个在 iOS 7 下运行的 iOS 5/6 应用程序,并且导航栏行为的改变导致了一个问题。
该应用程序已经像 iOS 7 默认一样工作,具有全屏视图和视图“上方”的半透明导航栏。问题是在 iOS 7 中隐藏/取消隐藏导航栏会导致不同的行为。在 iOS 5/6 上,隐藏/取消隐藏导航栏不会改变视图。在 iOS 7 上,隐藏栏在视觉上会向上移动视图,在屏幕底部留下一个空白栏,取消隐藏栏会向下移动视图以占据全屏(当然,导航栏在顶部)。
我需要继续支持 iOS 5,所以我不使用自动布局,但我确实使用全屏。我有一个正在查看可缩放图像的视图——因此视图控制器有一个全屏视图,其中包含一个包含 imageView 的滚动视图。
状态栏总是隐藏的。
我通过导航控制器进入视图控制器,因此在全屏视图/scrollView/imageView 的顶部有一个(黑色,半透明)导航栏。
短暂延迟后,一些覆盖标签消失,导航栏被隐藏单击即可恢复覆盖标签并取消隐藏导航栏。这适用于 iOS 5/6——导航栏从屏幕顶部滑出,露出视图/图像的顶部。
在 iOS 7 上,当导航栏滑离屏幕顶部时,整个视图在视觉上会向上移动相应的量(即 44 点),在屏幕底部留下一个黑条。我可以通过在顶级视图上设置背景颜色并调整滚动视图的大小以看到背景来看到这一点;视图的顶部确实移出了屏幕,并且背景颜色未绘制在屏幕的底部(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];
}
那么有人可以告诉我我缺少什么(可能很简单)吗?