Проблемы пользовательского интерфейса при переупорядочении UICollectionView с ячейками полной ширины и динамической высоты - PullRequest
0 голосов
/ 24 августа 2018

У меня есть CollectionView с ячейками, которые имеют полную ширину и динамическую (вычисляемую по макету) высоту.

Я делаю это, устанавливая приблизительную высоту:

flowLayout.estimatedItemSize = CGSize(width: 200, height: 10)

Затем, возвращая полную ширину и произвольную высоту в методе делегата.

public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.bounds.width, height: 10)
}

Затем в ячейке я делаю следующее:

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    setNeedsLayout()
    layoutIfNeeded()
    let size = self.systemLayoutSizeFitting(layoutAttributes.size)

    var newFrame = layoutAttributes.frame
    // note: don't change the width
    newFrame.size.height = ceil(size.height)
    layoutAttributes.frame = newFrame

    return layoutAttributes
}

Все работает как положено ... Размер ячейкикак они должны!Отлично!

Теперь я хотел бы добавить переупорядочение ... Я добавляю GestureRecognizer и заставляю его переставлять свои ячейки ..

@objc func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) {

    guard let view = gestureRecognizer.view else { return }
    let location = gestureRecognizer.location(in: view)

    switch gestureRecognizer.state {
    case .began:
        guard let selectedIndexPath = collectionView.indexPathForItem(at: location) else { break }
        collectionView.beginInteractiveMovementForItem(at: selectedIndexPath)
    case .changed:
        collectionView.updateInteractiveMovementTargetPosition(location)
    case .ended:
        collectionView.endInteractiveMovement()
    default:
        collectionView.cancelInteractiveMovement()
    }
}

Это также в основном работает ... но во время переупорядочения, мои клетки странно оживляют ... Ячейки иногда уменьшают свой размер до 10, но не позволяют клетке измерять себя.Отпустив перетаскивание, он снова работает ...

Я заметил, что когда я кеширую высоту моих CollectionViewCells, это немного лучше, но для всех ячеек, которые я раньше не видел, этоснова будет ячейка высотой 10 баллов.

Чего мне не хватает, чтобы размер ячеек был правильным при переупорядочении?

Sample

У меня также есть пример проекта с этой проблемой, который можно найти здесь: https://www.dropbox.com/s/ya6zald4wa6kg10/CollectionViewTester.zip?dl=0

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема в том, что при переупорядочении ячейки с автоматическим размером размер ячейки меняется на estimatedItemSize.

Здесь сообщается об открытом радаре здесь .

...