Черный fla sh в нижней части экрана после скрытия панели вкладок с помощью "hidesBottomBarWhenPushing = true" - PullRequest
0 голосов
/ 17 июня 2020

Я наткнулся на странный сбой анимации (?) При попытке скрыть свою панель вкладок, переопределив метод инициализации моего ViewController и добавив туда hidesBottomBarWhenPushed = true.

Я также пытался скрыть Панель вкладок со следующим кодом в viewDidLoad и viewWillAppear моего ViewController. Результаты такие же - черный fla sh на месте, где раньше была панель вкладок.

self.navigationController?.tabBarController?.tabBar.isHidden = true
self.extendedLayoutIncludesOpaqueBars = true

Кажется, в чем проблема? Заранее спасибо!

Вот код моего ViewController, на котором должна быть скрыта панель вкладок.

class CreateTaskViewController: UIViewController {

weak var coordinator: Coordinator?
private let createTaskView = CreateTaskView()

override func loadView() {
    createTaskView.viewController = self
    self.view = createTaskView
}

override func viewDidLoad() {
    super.viewDidLoad()

}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    self.hidesBottomBarWhenPushed = true
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

Также мой код подкласса UITabBarController

class TabBarController: UITabBarController {

    private let homeCoordinator = HomeCoordinator(navigationController: UINavigationController())
    private let createTaskCoordinator = CreateTaskCoordinator(navigationController: UINavigationController())
    private let categoriesCoordinator = CategoriesCoordinator(navigationController: UINavigationController())
    private let calendarCoordinator = CalendarCoordinator(navigationController: UINavigationController())

    weak var coordinator: TabBarCoordinator?

    override func viewWillLayoutSubviews() {
        tabBar.backgroundImage = UIImage.gradientImageWithBounds(bounds: tabBar.bounds, colors: [Colors.tabBarTopGradient, Colors.tabBarBottomGradient])
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = self
        homeCoordinator.start()
        createTaskCoordinator.start()
        categoriesCoordinator.start()
        calendarCoordinator.start()

        let imageForHomeView = UIImage(systemName: "house")
        let imageForCreateTaskView = UIImage(systemName: "plus.circle")
        let imageForCategoriesVIew = UIImage(named: "categories")
        let imageForCalendarView = UIImage(named: "calendar")

        UITabBar.appearance().tintColor = Colors.selectedTabBarItemColor
        tabBar.unselectedItemTintColor = Colors.unSelectedTabBarItemColor

        homeCoordinator.navigationController.tabBarItem = UITabBarItem(title: "", image: imageForHomeView, tag: 0)
        createTaskCoordinator.navigationController.tabBarItem = UITabBarItem(title: "", image: imageForCreateTaskView, tag: 1)
        categoriesCoordinator.navigationController.tabBarItem = UITabBarItem(title: "", image: imageForCategoriesVIew, tag: 2)
        calendarCoordinator.navigationController.tabBarItem = UITabBarItem(title: "", image: imageForCalendarView, tag: 3)

        viewControllers = [homeCoordinator.navigationController, createTaskCoordinator.navigationController, categoriesCoordinator.navigationController, calendarCoordinator.navigationController]
        self.selectedIndex = 0

    }
}

extension TabBarController: UITabBarControllerDelegate  {
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {

        guard let fromView = selectedViewController?.view, let toView = viewController.view else {
          return false 
        }

        if fromView != toView {
            UIView.transition(from: fromView, to: toView, duration: 0.3, options: [.transitionCrossDissolve], completion: nil)
        }
        return true
    }
}

И вот как выглядит: enter image description here

...