我有一个带有UINavigationController
和UITabBarController
的应用程序。在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)
将其添加到我的视图中。但是,这会返回包括UINavigationController
和UITabBarController
在内的所有内容之上的褪色背景,但不会覆盖状态栏。为了显示:
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中,但是也没有成功。有什么想法或建议吗?
答案 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)
}