ios - 在 iOS 8 中的 Apple 状态栏上方显示 UIView

标签 ios swift screen statusbar

我知道有一些关于此的问题,但没有人帮助我解决我的具体问题。我想在整个屏幕上方显示一个自定义模式,但我想保持 Apple 状态栏可见。对于模式,我将一个 UIView 用于调光效果,另一个用于用户将与之交互的实际 View 。然后将整个模式作为 subview 添加到当前 View 并置于最前面。本质上,我试图复制 UIAlertView 的行为,但自定义 View 除外。这是我的一些代码:

var modalView:UIView = UIView(frame: self.view.window!.bounds)
modalView.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.66)
modalView.addSubview(customView)    

self.view.window!.addSubview(modalView)
modalView.window!.windowLevel = UIWindowLevelStatusBar + 1

self.bringSubviewToFront(modalView)

上面,customView是用户与之交互的UIView

这很好用,但出于某种原因,即使状态栏的样式设置为 LightContent,Apple 状态栏上的文本也只是简单地消失了。从代码中可以看出,我没有触摸状态栏。

我正在尝试让状态栏上的文本像屏幕的其余部分一样变暗,但目前卡住了。有没有人对我如何获得所需的行为有任何见解?

如有任何帮助,我们将不胜感激!

最佳答案

2017 年 12 月更新 • Swift 4 • iOS 10.0+

我简单地尝试了接受的答案的编辑解决方案,但我无法轻松地为 UIView 横幅制作整个 viewController。但是,通过访问 UIApplication 中的 statusBar 值,我能够将 UIView 作为 subview 添加到 statusBarView这会将 UIView 放在状态栏的顶部。据我所知,这是一个相对稳定的解决方法,适用于最近的几个 iOS 版本。

extension UIApplication {

    /// Returns the status bar UIView
    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

用法

let customBannerView = CustomStatusView(with: message)
UIApplication.shared.statusBarView?.addSubview(customBannerView)

关于ios - 在 iOS 8 中的 Apple 状态栏上方显示 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26781837/

相关文章:

ios - 在 iOS 上显示基于 Unicode 的五位数埃及象形文字字体的代码是什么?

ios - NSDateFormatter dateFromString 总是返回 nil

android - 如何禁用电源按钮?

jquery - 在第 2 帧启动 jQuery 轮播

ios - 将付费应用更改为免费,但了解用户之前是否购买过

ios - Objective-C - 分配、复制、保留

swift - 按下按钮时如何在标签之间随机化?

ios - 使用默认值初始化 ViewModel

arrays - 我可以在 Array 上创建一个约束扩展,以便它只在 [CGPoint] 上运行吗

javascript - 如何获得屏幕宽度和高度的解决方案?