在包括状态栏的整个屏幕上添加黑色覆盖

时间:2018-11-28 14:47:47

标签: ios swift uinavigationcontroller uitabbarcontroller uistatusbar

我有一个带有UINavigationControllerUITabBarController的应用程序。在UITabBarController内是一个按钮,该按钮应该显示模式视图,为此,我想用淡化的背景(整个屏幕的黑屏为.5 alpha)将整个屏幕涂黑。

我使用UIView()进行以下操作,这是在UITabBarController类中设置的:

let fadeBackground: UIView = {
    let fadeBackground = UIView(frame: self.view.frame)
    fadeBackground.backgroundColor = UIColor.black
    fadeBackground.alpha = 0.5
    return fadeBackground
}()

然后使用view.addSubview(fadeBackground)将其添加到我的视图中。但是,这会返回包括UINavigationControllerUITabBarController在内的所有内容之上的褪色背景,但不会覆盖状态栏。为了显示: How do I create a base page in WPF?

我现在想知道如何将创建的UIView()添加到顶部位置,因此它也移过状态栏。我知道这可能很棘手,但是我看到一些应用程序在状态栏上有一个黑条,所以我认为这是我所需要的,然后将alpha相应地设置为.5。

到目前为止我尝试过什么:

  • fadeBackground.window?.windowLevel = UIWindow.Level.statusBar + 1
  • fadeBackground.layer.zPosition = 1

但是似乎都不起作用。我也尝试过使用UIView()UIApplication.shared.keyWindow?.addSubview(fadeBackground)添加到keyWindow中,但是也没有成功。有什么想法或建议吗?

2 个答案:

答案 0 :(得分:2)

您可以在StatusBarView内部添加另一个子视图,以使内部文本也消失。

extension UIApplication {
    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }
}

然后在ViewController中:

class CustomTabBarController: UITabBarController {
    lazy var fadeStatusBarBackground: UIView = {
        let fadeBackground = UIView(frame: UIApplication.shared.statusBarView?.frame ?? .zero)
        fadeBackground.backgroundColor = UIColor.black
        fadeBackground.alpha = 0.5
        return fadeBackground
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        UIApplication.shared.statusBarView?.addSubview(fadeStatusBarBackground)
    }
}

答案 1 :(得分:0)

尝试此操作,它将在整个屏幕上添加一个视图,包括statusBar,

if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let window = appDelegate.window {
        let windowFrame = window.frame
        let overlayView = UIView(frame: windowFrame)
        imageView.backgroundColor = UIColor.black.withAlphaComponent(0.7)
        window.addSubview(overlayView)
    }