iOS 13 удалить UIView для имитации фона строки состояния - PullRequest
1 голос
/ 30 января 2020

Я работаю с UITableViewController, который при прокрутке заставляет навигационную панель исчезать. Теперь, когда панель навигации скрыта, когда пользователь проводит пальцем по таблице, содержимое ячеек отображается под строкой состояния ...

Чтобы решить эту проблему, я попытался вставить UIView для имитации фона строки состояния и все работает, но проблема в том, что когда я закрываю UITableViewController, фоновое представление строки состояния не удаляется из суперпредставления

Пока мой код таков, вы можете помочь мне понять где я не прав? почему я не могу удалить UIView из суперпредставления?

 override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        setupStatusBarView()

    }

    override func viewWillDisappear(_ animated: Bool) {
       super.viewWillDisappear(animated)

       navigationController?.navigationBar.isHidden = true
        UIApplication.shared.windows.first?.viewWithTag(1)?.removeFromSuperview()
   }


    //MARK: - Setup Status Bar View

    func setupStatusBarView() {

        let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0

        let statusBarView = UIView()

        statusBarView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height:height+5)
        statusBarView.backgroundColor = .systemBackground
        statusBarView.tag = 1
        UIApplication.shared.windows.first?.addSubview(statusBarView)
    }

Ответы [ 2 ]

2 голосов
/ 30 января 2020

viewDidLayoutSubviews принимать вызовы несколько раз, и вы поместили setupStatusBarView() в viewDidLayoutSubviews, что означает, что ваш фоновый вид был добавлен несколько раз, и это совершенно неверный поток!

Вы удаляете только самый верхний вид не предыдущие!

Вы должны установить frame в viewDidLayoutSubviews и добавить вид из viewDidLoad!

0 голосов
/ 30 января 2020

попробуйте это

let subviewArray = UIApplication.shared.windows.first?.subviews
     for view in subviewArray!{
      if view.tag == 1{
         view.removeFromSuperview()
      }
   }
...