Ошибка макета представления коллекции при selectItem (Swift 5)

После выбора ячейки из viewDidLoad Layout изменяется

Перед выбором ячейки

Перед выбором ячейки

После выбора ячейки

let indexPath = IndexPath(row: SelectedFolderIndex, section: 0)       
collectionView.selectItem(at: indexPath, animated: false, scrollPosition: .centeredVertically)

После выбора ячейки

Макет

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.frame.width/2.2, height: 55)
}

ViewDidLoad

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 7, left: 12, bottom: 12, right: 12)
layout.minimumInteritemSpacing = 5
layout.minimumLineSpacing = 11
collectionView!.collectionViewLayout = layout
collectionView.delegate = self
collectionView.dataSource = self
collectionView.allowsMultipleSelection = false

2 ответа

Решение

Вам нужно вырезать вставки и интервалы из ширины ячейки:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = (collectionView.frame.width/2.2) - 2*12 - 11
    return CGSize(width: width, height: 55)
}

Когда вы устанавливаете scrollPosition: .centeredVerticallyвы устанавливаете, что после прокрутки все элементы будут расположены по центру и выровнены по вертикали, как вы можете видеть в вашем случае. Попробуйте взглянуть на https://developer.apple.com/documentation/uikit/uicollectionview/1618057-selectitem, чтобы изменить желаемое поведение.

Другие вопросы по тегам