Контроллер навигации установлен на ноль после анимации - PullRequest
0 голосов
/ 05 октября 2018

Доброе утро, и спасибо за чтение!В моем проекте я использую UICollectionViewController, и я реализовал анимацию, которая расширяет его ячейки на ощупь.Если вы не хотите получить лучшее представление об этом, просто загляните в раздел «Сегодня» в App Store.Мой CVC встроен в контроллер навигации, потому что я использую элемент навигации в моем представлении.При расширении я отклоняю его, и это, кажется, заставляет мой взгляд обрезать безопасную область, потому что ячейки не полностью раскрыты на iPhone X. Это первая проблема, но главная заключается в том, что контроллер навигации становится нулевым, когда яне хотите вернуться к элементу навигации (при свертывании).

Вот функция, которая вызывается при выборе ячейки:

func animateCell(_ cell: BookCell, style: CellAnimationStyle) {

    //...

    let dampingRatio: CGFloat = 0.8
    let initialVelocity: CGVector = CGVector.zero
    let springParameters: UISpringTimingParameters = UISpringTimingParameters(dampingRatio: dampingRatio, initialVelocity: initialVelocity)
    let animator = UIViewPropertyAnimator(duration: 0.8, timingParameters: springParameters)

    self.view.isUserInteractionEnabled = false
    self.CollectionView.isScrollEnabled = (style == .Collapse)

    let NVC = self.navigationController!

    if style == .Expand {
        self.expandedCell = cell
        NVC.setNavigationBarHidden(true, animated: true)
    } else {
        DispatchQueue.main.async {
            self.expandedCell = nil
            NVC.setNavigationBarHidden(false, animated: true)
        }
    }

    animator.addAnimations {

        if style == .Expand {
            self.statusBarHidden = true
            self.CollectionView.bringSubviewToFront(cell)
            cell.expand(collectionView: self.CollectionView)
        } else {
            self.statusBarHidden = false
            cell.collapse(collectionView: self.CollectionView)
        }
    }

    animator.addCompletion() { _ in
        DispatchQueue.main.async {
            self.view.isUserInteractionEnabled = true
            self.CollectionView.isScrollEnabled = (style == .Collapse)
        }
        if style == .Expand {
            cell.isExpanded = true
        } else {
            cell.isExpanded = false

        }
    }
    animator.startAnimation()

    self.setNeedsStatusBarAppearanceUpdate()
    cell.layoutIfNeeded()
}

Затем, когда ячейка расширяется, онаполучает кнопку закрытия, связанную с этим IBAction:

@IBAction func didTouchCollapse(_ sender: UIButton) {

    guard let nc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BookNC") as? UINavigationController else { return }
    guard let delegate = nc.children.first as? ChaptersCollectionViewDelegate else { return }

    delegate.collapseCell(self, style: .Collapse)

}

Метод делегата просто вызывает animateCell () с ячейкой и стилем .Collapse в качестве параметров.Большое спасибо за вашу помощь!

...