Добавить черное наложение на весь экран, включая строку состояния - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть приложение с UINavigationController и UITabBarController.Внутри UITabBarController есть кнопка, которая должна представлять модальный вид, для которого я хочу заштриховать весь экран с блеклым фоном (черный с .5 альфа).

Я делаю это с 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, но не перекрывает строку состояния.Для иллюстрации: entire screen is faded, except status bar

Теперь мне интересно, как я могу добавить созданный мной UIView() в верхнюю позицию, чтобы он также проходил через строку состояния.Я знаю, что это может быть сложно, но я видел приложения, где над строкой состояния есть черная полоса, поэтому я думаю, что это то, что мне нужно, и затем устанавливаю альфа на .5 соответственно.

Что ядо сих пор пробовал:

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

Но, похоже, не работает.Я также попытался добавить UIView() в keyWindow с помощью UIApplication.shared.keyWindow?.addSubview(fadeBackground), но также безуспешно.Есть идеи или предложения?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете добавить другое подпредставление прямо внутри 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)
    }
}
0 голосов
/ 28 ноября 2018

Попробуйте, это добавит вид на весь экран, включая строку состояния,

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)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...