UINavigationController 包含、iOS7 和状态栏。漏洞?
Posted
技术标签:
【中文标题】UINavigationController 包含、iOS7 和状态栏。漏洞?【英文标题】:UINavigationController containment, iOS7 and Status Bar. Bug? 【发布时间】:2013-10-20 20:14:43 【问题描述】:我正在更新我的自定义“iAD 横幅控制器”以支持 ios 7。
它基本上是一个由 3 个视图组成的 UIViewController
容器:
当 AD 可用时,会有一个动画过渡,使横幅视图和状态栏背景视图看起来从顶部滑动。
这一切都是使用自动布局管理的,应该是这样的(状态栏背景是绿色的,在这种情况下它包含一个UINavigationController
):
问题是这样的:使用 UINavigationController 作为包含的控制器,当横幅不可见时,导航控制器在状态栏下扩展 20px。这没关系,也是意料之中的。 但是,当我将它的超级视图(容器)向下移动以让 iAD 横幅出现时,20px 扩展仍然存在,结果如下:
但是,如果我执行旋转界面之类的操作,导航控制器会检测到状态栏为“远”,然后自行调整。
我尝试在控制器上分别调用setNeedsStatusBarAppearanceUpdate
和layoutIfNeeded
,但没有结果。
如果你想看,我附上整个项目:Link to the project
【问题讨论】:
【参考方案1】:到目前为止,我使用了一种解决方法:当广告出现/消失时,我调用
[self.navigationController setNavigationBarHidden:YES animated:NO];
[self.navigationController setNavigationBarHidden:NO animated:NO];
使用此解决方法,我强制UINavigationController
再次检测到状态栏为“远”并且它必须重新计算偏移量。
由于我的视图层次结构不是那么简单,并且我想在其他项目中重复使用我的 AD 控制器,因此我使用了通知来提醒 AD 正在出现/消失。
我会在将其标记为正确前几天等待其他更好的答案。 谢谢
【讨论】:
以上是关于UINavigationController 包含、iOS7 和状态栏。漏洞?的主要内容,如果未能解决你的问题,请参考以下文章
包含 UINavigationController 的状态栏大小不正确
UINavigationController 包含一个 UITableView,然后是一个包含更多 UITableView 的 UITabBarController
UINavigationController 包含、iOS7 和状态栏。漏洞?