1

我正在更新我的自定义“iAD 横幅控制器”以支持 iOS 7。它基本上是一个UIViewController由 3 个视图组成的容器:

  • 主视图(包含的控制器的视图)
  • 横幅视图
  • 状态栏背景视图

当 AD 可用时,会有一个动画过渡,使横幅视图和状态栏背景视图看起来从顶部滑动。这一切都使用自动布局进行管理,应该如下所示(状态栏背景是绿色的,在这种情况下它包含一个UINavigationController):

正确的

问题是这样的:使用 UINavigationController 作为包含的控制器,当横幅不可见时,导航控制器在状态栏下扩展 20px。这没关系,也是意料之中的。但是,当我将它的超级视图(容器)向下移动以让 iAD 横幅出现时,20px 扩展仍然存在,结果如下:

错误的

但是,如果我执行旋转界面之类的操作,导航控制器会检测到状态栏为“远”,然后自行调整。

我试图分别在控制器和它的视图上调用setNeedsStatusBarAppearanceUpdate和,但没有结果。layoutIfNeeded

如果你想看看,我附上整个项目:链接到项目

4

1 回答 1

3

到目前为止,我使用一种解决方法解决了:当广告出现/消失时,我调用

[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];

使用此解决方法,我强制UINavigationController再次检测状态栏是“远”并且它必须重新计算偏移量。由于我的视图层次结构不是那么简单,并且我想在其他项目中重新使用我的 AD 控制器,因此我使用了通知来提醒 AD 正在出现/消失。

几天后我将等待其他更好的答案,然后将其标记为正确。谢谢

于 2013-10-21T09:38:51.003 回答