Ошибка макета представления коллекции при 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, чтобы изменить желаемое поведение.