我有一个覆盖(UIImageView)
,它应该具有透明背景和alpha。如何设置imageview
以覆盖整个屏幕?目前,它涵盖了屏幕但不包括UIStatusBar
。我将AppDelegate's
主window
中的视图添加为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)
答案 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
颜色。您可以将其样式设置为default
或light
。
答案 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
作为叠加层并添加 图像视图作为该叠加层的子视图。