iOS7隐藏状态栏但不调整顶部布局指南

Posted

技术标签:

【中文标题】iOS7隐藏状态栏但不调整顶部布局指南【英文标题】:iOS7 hide status bar but not adjust top layout guide 【发布时间】:2014-03-12 10:56:33 【问题描述】:

我处理在 Interface Builder 中设置的自动布局。当我在运行时隐藏状态栏时,我不想偏移固定到顶部布局指南的视图。

我发现myViewController.topLayoutGuide.length在隐藏状态栏时会从20变为0。如何预防?或者(作为解决方法)如何在没有固定到顶部布局指南的情况下为各种窗口大小设置全屏视图?

一些代码来描述我的情况:

Log(@"frame: %@, top: %.0f", NSStringFromCGRect(myViewController.myView.frame), self.topLayoutGuide.length);
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Log(@"frame: %@, top: %.0f", NSStringFromCGRect(myViewController.myView.frame), self.topLayoutGuide.length);

输出:

frame: 40, 24, 240, 40, top: 20
frame: 40, 4, 240, 40, top: 0

【问题讨论】:

不完全清楚您要达到的目标。无论状态栏是否显示,您是否试图让视图在固定位置显示元素?还是这是 ios6/7 切换问题?如果在布局组件与运行时结果时出现问题,您还可以隐藏 IB 中的状态栏。 我在运行时隐藏状态栏,此时 UI 会发生变化。原因在topLayoutGuide。当状态栏隐藏时,我想将 UI 保持在其位置。 您是在显示视图然后-然后-摆脱状态栏,还是在显示视图之前告诉状态栏不要出现? 恐怕我们在谈论不同的事情...... 【参考方案1】:

topLayoutGuide 属性是只读的,你不能阻止它改变。

您可以不将项目固定到 topLayoutGuide 而是固定到超级视图。这应该可以解决您的问题。

【讨论】:

谢谢 :-) 超级视图约束似乎只有通过屏幕截图上的相同菜单才能使用。 这是一个很棒的提示! 太棒了!你节省了我的时间~ 另外,您需要将导航栏半透明选项设置为 TRUE。

以上是关于iOS7隐藏状态栏但不调整顶部布局指南的主要内容,如果未能解决你的问题,请参考以下文章

隐藏状态栏但显示操作栏

iOS_隐藏顶部状态栏

iOS_隐藏顶部状态栏方式

通话状态栏更改时查看调整大小[重复]

在iOS 7中隐藏状态栏时防止UINavigationController调整原点

有没有办法保留状态栏(iOS 7)但隐藏信号?