【问题标题】:UIView to cover iPhone status/carrier barUIView 覆盖 iPhone 状态/运营商栏
【发布时间】:2010-10-06 05:10:38
【问题描述】:

我正在尝试创建一个模仿UIAlertView 行为的UIView(和关联的UIViewController)。鉴于我的要求,从头开始创建自己的实现似乎比尝试子类化和修改UIAlertView 要好得多。为此,我获取了对应用程序委托的引用,然后将UIViewController.view(alpha 约为 0.6)添加为应用程序主窗口的子视图。这意味着它将出现在屏幕上所有其他视图的顶部,并模拟在UIAlertView 中找到的暗色背景。

一切正常,除了UIView(即UIViewController.view)没有覆盖屏幕顶部的状态/运营商栏。这意味着除了载体栏外,所有屏幕都变暗了,看起来有点奇怪!有什么方法可以让UIView 出现在载体栏的顶部?我听说过在应用程序中添加第二个UIWindow 的想法,但这似乎并不明智(因为Apple 文档说你应该只在应用程序中拥有一个UIWindow),即使这是最好的解决方案,我不确定这种解决方案的技术实现。

【问题讨论】:

  • 请记住,一旦 iOS 5 发布,这将是一个非常糟糕的主意。显示状态栏的应用程序依赖它来显示通知中心,如果你在上面放一些东西,你可能会破坏这个功能。隐藏状态栏会是更好的方法,因为通知中心下拉的行为不同,你不会破坏它。

标签: iphone cocoa-touch uiview uiviewcontroller uialertview


【解决方案1】:

为了覆盖状态栏而不隐藏它,您需要在状态栏上方放置一些东西,并且由于状态栏显示在另一个窗口中,因此您必须使用带有 UIWindowLevelStatusBar 的第二个窗口。

我做过这样的事情,它确实有效,但感觉就像是一个 hack,这要归功于 Apple 的文档,或者缺少它。您像往常一样创建第二个窗口。要隐藏它,您应该设置它的隐藏属性并释放它。为了确保您没有泄漏窗口,我建议将 UIWindow 子类化以进行调试并覆盖其 dealloc 以包含 NSLog。另外,查看 UIApplication 的 windows 属性,它应该反映窗口正常关闭。

不过,背面最大的痛点是设备方向的变化。

【讨论】:

  • 感谢康斯蒂克。您的回复给了我使用 UIWindowLevelStatusBar 的关键线索。在使用该关键字对 StackOverflow 进行更多搜索后,我发现了一些完美运行的示例代码 - stackoverflow.com/questions/2666792/…。希望这对也希望实现相同目标的其他人有用。
猜你喜欢
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多