iOS 7自动布局 - 忽略通话状态栏

3
使用自动布局约束,我正在尝试设置一个子视图的垂直位置,即使显示呼叫状态栏(或其他非标准状态栏),其位置也不会改变。我不想将视图相对于底部布局指南定位,因为我希望其y坐标在3.5英寸和4英寸设备上相同。
下面是我想要发生的事情的示意图:
[标准状态栏] [呼叫状态栏]
最初,我使用“Top Space to: Top Layout Guide”约束来设置子视图的y位置。使用此配置,呼叫状态栏将子视图向下推20像素。
接下来,我尝试用“Top Space to: Superview”替换该约束,其中Superview是控制器的根视图。但没有任何变化。是否有其他方法可以使用自动布局约束来保持视图的恒定y位置?我知道我可以通过订阅UIApplicationDidChangeStatusBarFrameNotification来手动处理此问题,但如果可能的话,我想保持简单。
2个回答

1
你的标签位置设置为在视图顶部和标签顶部之间有一个上边距。当状态栏增长时,你的视图会缩小。如果你希望标签保持在原处,可以监听UIApplicationWillChangeStatusBarFrameNotification通知,并调整视图的大小和位置来抵消状态栏额外的空间。如果你只想让标签向上移动,也可以监听上述通知,并相应地调整上方空间约束。

谢谢回复:我没有意识到呼叫状态栏实际上会缩小根视图,所以很高兴你指出了这一点。然而,正如我在问题中提到的那样,我知道可以通过监听 UIApplicationWill/DidChangeStatusBarFrameNotification 通知来解决此问题。我真正想知道的是是否有一种更简单的解决方案,不需要手动调整视图框架。我开始觉得答案是“否”…… - gilby
1
答案是“不”。 :-) 无论是查看框架还是约束常量,您都必须自己进行一些更改。 - Léo Natan

0

不,你不能这么做。

在纵向模式下,框架的高度会减少20像素 :( 而布局指南却不会关心它。

因此,要么像Leo Natan所说的那样使用UIApplicationWillChangeStatusBarFrameNotification通知,要么使用bottomConstraint,但你不想这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接