ios - UINavigationController 包含、iOS7 和状态栏。漏洞?

标签 ios objective-c uinavigationcontroller ios7 autolayout

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

  • 主视图(包含的 Controller 的 View )
  • 横幅 View
  • 状态栏背景 View

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

    Correct

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

    Wrong

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

    我试着调用setNeedsStatusBarAppearanceUpdatelayoutIfNeeded分别在 Controller 和它的 View 上,没有结果。

    如果你想看看,我附上整个项目:Link to the project

    最佳答案

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

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

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

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

    关于ios - UINavigationController 包含、iOS7 和状态栏。漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19482328/

    相关文章:

    ios - 解析 Apns 负载

    ios - 打开邮件、消息、Twitter 或 Facebook 等系统应用程序时,不会调用 UIDocumentInteractionControllerDelegate 方法

    uinavigationcontroller - 为什么在导航栏中,推送和弹出无法根据 (XCode) ios sdk-7 正常工作?

    ios - 标题有什么不同?

    iphone - pushViewController 在 iOS 5 上不起作用(在 iOS 6 上正常)

    ios - Blender + SceneKit(操作方法)

    iphone - Xcode中抑制 "Undefined symbol"(4)

    ios - 我想将透明自定义单元格的触摸事件传递给它的父 View (这是一个页面 View Controller )?

    ios - UIView 的动画透视以向上/远离底部翻转一半

    iphone - 对象在 iOS 5 ARC 中发布得太早