CollectionView отключает ячейки во время анимации

#ios #swift

#iOS #swift

Вопрос:

Итак, у меня есть CollectionView, который привязан к другому подвиду внутри моего ViewController. Оранжевый вложенный просмотр привязан к нижней части панели навигации, и его значения высоты и альфа анимируются.

Когда он анимирован, collecitonView сдвигается вниз во время анимации. Хотя, как вы увидите, некоторые нижние ячейки исчезают перед анимацией, из-за чего она выглядит неровной.

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

Это функция, которая настраивает вложенные представления ViewController:

 private func setupSubviews() {
    view.addSubview(newMessageView)
    NSLayoutConstraint.activate([
        newMessageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
        newMessageView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        newMessageView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
        ])
    newMessageView.heightConstraint = newMessageView.heightAnchor.constraint(equalToConstant: 0)
    newMessageView.heightConstraint?.isActive = true


    view.addSubview(messagesCollectionView)
    messagesCollectionView.anchor(top: newMessageView.bottomAnchor, leading: view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)
}
  

Это вызываемая функция:

 @objc func newMessage() {

toggleHeader = !toggleHeader

UIView.animate(withDuration: 1.0, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {

    if (self.toggleHeader) {
        self.newMessageView.heightConstraint?.constant = 200
    } else {
        self.newMessageView.heightConstraint?.constant = 0
    }

    self.view.layoutIfNeeded()
})
  

}

Я просто изменяю ограничение высоты, которое я ввел. Я полагаю, что это связано с функцией didEndDisplaying, которая определяет, что ячейки не будут видны, и отключает их.

Как бы мне изменить или улучшить это? Или есть способ остановить CollectionView от удаления не отображаемых ячеек?

Спасибо

Комментарии:

1. Поделитесь своим кодом, пожалуйста

2. ОК. Я обновил его.

Ответ №1:

Неважно. Исправлено.

Изменен нижний якорь CollectionView на view.safeAreaLayoutGuide.bottomAnchor.

Комментарии:

1. Я собирался сказать, что (: На самом деле подумал, что вам также следует добавить setLayoutIfNeeded в messagesCollectionView, но если это работает так, тогда идеально