【问题标题】:How do I detect a double-height status bar?如何检测双高状态栏?
【发布时间】:2011-03-26 03:01:39
【问题描述】:

HIG (p.47) 说我必须能够处理在通话或录音期间出现的双倍高度状态栏。

我该如何处理这种情况?

我真的只有 1 个屏幕,当双高状态栏显示时,带有工具栏的键盘覆盖在文本字段下方 - 在其他屏幕上,东西只是有点皱巴巴但可以使用。

如果我可以检测到双高状态栏存在,我可能会调整文本字段的位置或使它们暂时变短,但是否可以检测到双高状态栏何时存在?

编辑:也许如果有一种方法可以获得已知事物的绝对坐标,例如导航栏,并且如果它偏离 +20 像素,我会假设存在双高状态栏。想法?

还有一个次要问题,如果这个(或任何东西)有效,我只想使用

隐藏常规状态栏
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO]

但我不想同时隐藏两者 - 基本上是一种不必触摸我的任何屏幕的懒惰方式 - 如果存在双重,则通过隐藏常规状态栏再次使其成为单一。上面的代码会隐藏两者吗?

【问题讨论】:

    标签: iphone statusbar


    【解决方案1】:

    您可以监控这些 UIApplicationDelegate 的回调:

    • 应用程序:willChangeStatusBarFrame:

    • 应用程序:didChangeStatusBarFrame:

    而且很容易在 iphone 模拟器中进行测试:Hardware->Toggle In-Call Status Bar

    根据您的情况,您的视图和其中的东西可以自动调整大小以适应空间 - 检查不同对象的 Interface Builder 中检查器窗口的 View Size 区域

    【讨论】:

    • 这会解决用户正在通话或正在录制的情况然后进入我的应用程序吗?还是只会在应用中监控一次更改?
    • 好的,也许你可以检查 UIApplicationStatusBarFrameUserInfoKey
    • 感谢您为我指明了正确的方向。要在进入应用程序之前处理呼叫发起,在某些 viewDidLoad 中,我只需检查状态栏框架的大小 - 如果超过 20,则假设正在进行呼叫并相应地调整视图大小。我遇到了代表的麻烦。它在方法放入我的 AppDelegate 时触发,但在我需要它的类中时不会触发,即使我在该类中采用 UIApplicationDelegate 所以不确定如何处理在每个类中开始或结束的调用 - 什么是桥梁AppDelegate 中的方法到我要更改视图的类?
    • 整理代理问题
    【解决方案2】:

    当用户使用许多其他实用程序(如热点)时也会出现此问题。为了解决这个问题,我使用以下代码行(因为我自己被困在这个问题中)。

    self.tabBarController?.tabBar.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleTopMargin.rawValue)))
    

    Objective C reference for same issue available here

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多