У меня есть Single UICollectionView
, и я хочу динамически применить два разных макета.
UICollectionViewFlowLayout
: макет с ячейкой одинакового размера и изображением круга.
var flowLayout: UICollectionViewFlowLayout {
let flowLayout = UICollectionViewFlowLayout()
flowLayout.itemSize = CGSize(width: UIScreen.main.bounds.width/3, height: 140)
flowLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)
flowLayout.scrollDirection = UICollectionViewScrollDirection.vertical
flowLayout.minimumInteritemSpacing = 0.0
return flowLayout
}
Pintrest Layout
:
https://www.raywenderlich.com/392-uicollectionview-custom-layout-tutorial-pinterest
Например: когда пользователь нажимает кнопку профиля, FlowLayout будет применен, и появится ячейка с изображением в форме круга. когда пользователь нажмет на кнопку Изображение, будет применен макет pintrest и появится ячейка с изображением в форме прямоугольника с динамической высотой.
изначально CollectionView имеет 1.flowLayout, и он выглядит идеально. Но когда я нажимаю кнопку Picture, макет Pintrest портится с предыдущим макетом, как показано на изображении выше.
Ниже приведен код для изменения макета.
if isGrid {
let horizontal = flowLayout
recentCollectionView.setCollectionViewLayout(horizontal, animated: true)
recentCollectionView.reloadData()
}
else {
let horizontal = PinterestLayout()
horizontal.delegate = self
recentCollectionView.setCollectionViewLayout(horizontal, animated: true)
recentCollectionView.reloadData()
}
Вид иерархии:
У меня есть основное представление Collection, которое содержит заголовок Container и одну нижнюю ячейку. Ячейка содержит другое представление Collection, к которому я применяю несколько макетов. У меня есть две разные ячейки для каждого макета. Я хочу, чтобы размер нижней ячейки был равен Представление в виде коллекции Размер содержимого, позволяющий пользователю прокручивать весь основной вид коллекции по вертикали.
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell : UICollectionViewCell!
switch isGrid {
case true:
cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SearchProfileCell", for: indexPath)
if let annotateCell = cell as? SearchProfileCell {
annotateCell.photo = photos[indexPath.item]
}
case false:
cell = collectionView.dequeueReusableCell(withReuseIdentifier: "AnnotatedPhotoCell", for: indexPath)
if let annotateCell = cell as? AnnotatedPhotoCell {
annotateCell.cellwidth = collectionView.contentSize.width/3
annotateCell.photo = photos[indexPath.item]
}
}
cell.contentView.layer.cornerRadius = 0
return cell
}
Код кнопки профиля и изображения Действие.
@IBAction func pictureClick(sender:UIButton) {
isGrid = false
self.searchCollectionView.reloadData()
}
@IBAction func profilClick(sender:UIButton) {
isGrid = true
self.searchCollectionView.reloadData()
}