Приложение Swift для iOS, как отобразить UIView поверх UITabBarController - PullRequest
0 голосов
/ 25 мая 2018

У меня есть приложение для iOS с 3 ViewController, на моем первом ViewController, если пользователь не вошел в систему, я показываю всплывающее окно, которое покрывает весь экран черным UIView (непрозрачность 50%, как UIAlertController) и 2 кнопки (зарегистрировать)или войдите).

Проблема в том, что tabBar всегда находится над моим UIView, и я хотел бы отобразить поверх tabBar ... (Я не могу просто скрыть tabBar из-за непрозрачности, я все ещехочу видеть панель вкладок под моим черным непрозрачным видом 50%.

Я пробовал с zPosition слоя, но это не работает.

Есть идеи?

Спасибо

Ответы [ 3 ]

0 голосов
/ 25 мая 2018

Это будет правильный способ сделать это:

/* Add dialog to main window */
guard let appDelegate = UIApplication.shared.delegate else { fatalError() }
guard let window = appDelegate.window else { fatalError() }
window?.addSubview(self)
window?.bringSubview(toFront: self)
window?.addSubview(**Your view**)
window?.endEditing(true)
0 голосов
/ 25 мая 2018

Вы можете попробовать это:

class YourView: UIView {
    //setup your view...
}

protocol YourViewPresenter {
    func showYourView()
    func hideYourView()
}

extension YourViewPresenter where Self: UIViewController {
    func showYourView() {
        let yourView = YourView()
        view.addSubview(yourView)
        //after adding newly view, need to resize it
        yourView.fillSuperview()
    }

    func hideYourView() {
        (view.subviews.filter { $0 is PVInvitePopupView }).first?.removeFromSuperview()
    }
}

extension UIView {
    func fillSuperView() {
        guard let superView = superview else { return }
        translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
        leadingAnchor.constraint(equalTo: superView.leadingAnchor, constant: 0),
        trailingAnchor.constraint(equalTo: superView.trailingAnchor, constant: 0),
        topAnchor.constraint(equalTo: superView.topAnchor, constant: 0),
        bottomAnchor.constraint(equalTo: superView.bottomAnchor, constant: 0)
        ])
    }
}

И затем просто настроить ваш TabBarController на это расширение:

extension UITabBarController: YourViewPresenter {}
//...

Затем вы можете вызвать showYourView() где-то в вашем viewController, например:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.showYourView()
}
0 голосов
/ 25 мая 2018

Вы должны добавить представление в окне.

AppDelegate.swift:

class func getDelegate() -> AppDelegate
    {
        return UIApplication.shared.delegate as! AppDelegate
    }

YourViewController.swift

    // set frame to full windows size 
    your_popup_view.frame = AppDelgate.getDelegate().window?.frame; 

    // add view on the top current window
    AppDelgate.getDelegate().window?.addSubview(your_popup_view)
...