添加叠加层以覆盖整个屏幕(包括状态栏)

时间:2018-04-06 09:25:08

标签: ios swift

我有一个覆盖(UIImageView),它应该具有透明背景和alpha。如何设置imageview以覆盖整个屏幕?目前,它涵盖了屏幕但不包括UIStatusBar。我将AppDelegate'swindow中的视图添加为subview

代码:

    let overlay1 = UIImageView(image: UIImage(named: "overlay-image"))
    overlay1.contentMode = .scaleAspectFit
    overlay1.backgroundColor = UIColor.black
    overlay1.alpha = 0.87
    overlay1.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)

    overlay1.isUserInteractionEnabled = true
    overlay1.layer.zPosition = 1
    (UIApplication.shared.delegate as? AppDelegate).window.addSubview(overlay1)

2 个答案:

答案 0 :(得分:1)

在评论中进行讨论后发现,更改backgroundColor的{​​{1}}是您的代码无法正常运行的原因。

通过打印statusBar superView我发现statusBar上没有添加statusBar,而是UIWindow上的UIStatusBarWindow可能高于mainWindow guard 1}}。

另外请不要使用强行展开它可能导致崩溃。最后,我添加statusBar来获取backgroundColor,以检查它是否响应superView属性,获取其superView并在此{{1}上添加叠加层让它运转起来。

您对respondToSelector的检查也是错误的。根据您的要求查看下面的代码。

guard let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView, statusBar.responds(to: NSSelectorFromString("backgroundColor")), let superView = statusBar.superview  else {return}

statusBar.backgroundColor = UIColor.red

let overlay1 = UIImageView(image: UIImage(named: "overlay-image"))
overlay1.contentMode = .scaleAspectFit
overlay1.backgroundColor = UIColor.black
overlay1.alpha = 0.87
overlay1.frame = superView.bounds

overlay1.isUserInteractionEnabled = true
overlay1.layer.zPosition = 1
superView.addSubview(overlay1)

注意:建议不要更改statusBar颜色。您可以将其样式设置为defaultlight

答案 1 :(得分:0)

好的,我只是尝试了一些东西而且它有效。只需在您的ViewController中使用它:

// You should be using viewDidAppear(_:)
override func viewDidAppear(_ animated: Bool) {
    if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let window = appDelegate.window {
        let windowFrame = window.frame
        let imageView = UIImageView(frame: windowFrame)
        imageView.image = #imageLiteral(resourceName: "TakeOff") // use your image
        imageView.contentMode = .scaleAspectFit
        imageView.backgroundColor = UIColor.green.withAlphaComponent(0.2) // replace green with the color you want
        window.addSubview(imageView)
    }
}
  

但是,记住一件事。添加图像视图不是一个好主意   叠加。您应始终使用UIView作为叠加层并添加   图像视图作为该叠加层的子视图。

<强>截图: Overlay image view