черный экран виден при перетаскивании контроллера просмотра на контроллер вкладок в Swift?

Когда я представляю от TabbarController до внешнего Viewcontroller, представляющего правильно, а также правильно отклоняющего. Но когда я перетаскиваю, чтобы закрыть ViewController, он показывает черный экран с использованием UIPanGestureRecognizer.

От TabbarController до ViewController Настоящий код

  let newVC = self.storyboard?.instantiateViewController(withIdentifier: "ExampleViewController") as! ExampleViewController
  self.definesPresentationContext = true
  newVC.modalPresentationStyle = .overCurrentContext
  self.present(newVC, animated: true, completion: nil)

Отклонить код ExampleViewController для TabbarController

override func viewDidLoad()
{
    super.viewDidLoad()

     let gestureRecognizer = UIPanGestureRecognizer(target: self,
                                                   action: #selector(panGestureRecognizerHandler(_:)))
    view.addGestureRecognizer(gestureRecognizer)

}

@IBAction func panGestureRecognizerHandler(_ sender: UIPanGestureRecognizer) {
    let touchPoint = sender.location(in: view?.window)
    var initialTouchPoint = CGPoint.zero

    switch sender.state {
    case .began:
        initialTouchPoint = touchPoint

    case .changed:
        if touchPoint.y > initialTouchPoint.y {
            view.frame.origin.y = touchPoint.y - initialTouchPoint.y

        }
    case .ended, .cancelled:
        if touchPoint.y - initialTouchPoint.y > 200 {

            self.navigationController?.popViewController(animated: false)
        } else {
            UIView.animate(withDuration: 0.2, animations: {
                self.view.frame = CGRect(x: 0,
                                         y: 0,
                                         width: self.view.frame.size.width,
                                         height: self.view.frame.size.height)

            })
        }
    case .failed, .possible:
        break
    @unknown default:
        break
    }
}

Примечание: - Иерархия моего проекта, подобная этому NavigationController --> SomeViewControllers --> TabbarViewController --> ExampleViewController

введите здесь описание изображения

заранее спасибо


person Vadlapalli Masthan    schedule 05.03.2020    source источник
comment
Не могли бы вы поделиться скриншотом вашего интерфейса?   -  person emrcftci    schedule 05.03.2020
comment
Вы имеете в виду ExampleViewController в моем пользовательском интерфейсе?   -  person Vadlapalli Masthan    schedule 05.03.2020
comment
Это не то, как перетаскивать представление контроллера представления. Вам нужна пользовательская интерактивная анимация перехода.   -  person matt    schedule 05.03.2020
comment
Удалите эту строку: newVC.modalPresentationStyle = .overCurrentContext и попробуйте снова перетащить.   -  person Niraj    schedule 05.03.2020
comment
@Niraj, я тоже удалил эту строку, но она не работает. Что еще нужно изменить в моем коде?   -  person Vadlapalli Masthan    schedule 05.03.2020


Ответы (2)


Попробовал ваш код, просто укажите NavigationController между экраном вкладки и вашим контроллером представления.

let newVC = self.storyboard?.instantiateViewController(withIdentifier: "ExampleViewController") as! ExampleViewController
newVC.modalPresentationStyle = .overCurrentContext
self.present(newVC, animated: true, completion: nil)

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

Или вы можете использовать строку ниже в AppDelegate, как предлагается здесь: https://stackoverflow.com/a/45994837/12830762

window?.backgroundColor = UIColor.white

person Niraj    schedule 05.03.2020
comment
Я попробовал то, что вы сказали, но остался тем же черным экраном. Что-нибудь, что я хочу изменить в пользовательском интерфейсе или коде? - person Vadlapalli Masthan; 05.03.2020
comment
Когда я пытаюсь использовать Viewcontroller для ExampleViewController, он работает нормально - person Vadlapalli Masthan; 05.03.2020
comment
На самом деле, когда отклонить ViewController для ViewController, работает хорошо без черного экрана. Но когда дело доходит до ViewController до TabbarController, он не работает. Он показывает черный экран. При перетаскивании, чтобы закрыть - person Vadlapalli Masthan; 06.03.2020
comment
Я обновил свой пользовательский интерфейс, проверьте его - person Vadlapalli Masthan; 06.03.2020
comment
Ваш интерфейс выглядит идеально. Откуда вы представляете свою панель вкладок ExampleViewController или контроллер первого представления панели вкладок? - person Niraj; 06.03.2020
comment
я представляю из FirstViewController Tabbar. При нажатии кнопки внутри FirstViewController представляет пример ViewController - person Vadlapalli Masthan; 06.03.2020
comment
Тогда это работает хорошо в моем случае. Вы удалили self.definesPresentationContext = true ? - person Niraj; 06.03.2020
comment
я удалил эту строку, но остался тот же черный экран - person Vadlapalli Masthan; 06.03.2020
comment
Это единственное, что я нашел, приводит к тому, что черный экран пробовали с моим кодом в той же иерархии, а также нашли в SO: -to-black-screen" title="self definespresentationcontext true приводит к черному экрану"> stackoverflow.com/questions/35943496/ - person Niraj; 06.03.2020
comment
я нашел окно решения?.backgroundColor = UIColor.white эта строка только что добавлена ​​в AppDelegate, она хорошо работает с белым цветом - person Vadlapalli Masthan; 06.03.2020
comment
Рад, что ты нашел это. - person Niraj; 06.03.2020

Вставьте навигационный контроллер между

TabbarViewController-->ExampleViewController

Так должно быть:

TabbarViewController--> NavigationController -->ExampleViewController

Просто выберите ExampleViewController, выберите «Встроить контроллер навигации в раскадровку». И используйте метод Segue push.

person Anil Kumar    schedule 05.03.2020
comment
я не хочу использовать метод Segue. А также без NavigationController в ExampleViewController, для меня это работает хорошо. - person Vadlapalli Masthan; 05.03.2020
comment
вы также можете использовать настоящее с навигационным контроллером и скрыть панель навигации, если это не требуется. - person Anil Kumar; 05.03.2020
comment
Я также пробовал это, пусть newVC: AddActivityVC = self.storyboard?.instantiateViewController(withIdentifier: ExampleViewController) as! ExampleViewController let navigationController = UINavigationController(rootViewController: newVC) self.navigationController?.pushViewController(newVC, анимированный: true) - person Vadlapalli Masthan; 05.03.2020
comment
но не работает, я использовал настоящее вместо нажатия, остается прежним - person Vadlapalli Masthan; 05.03.2020
comment
используйте так: пусть exampleViewController = self.storyboard?.instantiateViewController(withIdentifier: ExampleViewController) as! ExampleViewController пусть navigationController = UINavigationController(rootViewController: exampleViewController) navigationController.modalPresentationStyle = UIModalPresentationStyle. overCurrentContext self.present (navigationController, анимированный: true, завершение: ноль) - person Anil Kumar; 05.03.2020