У меня есть collectionView с пользовательской ячейкой. Я хочу создать макет imageView внутри моей ячейки с определенной компоновкой, но он неправильно его раскладывает.
1-я и 3-я строки имеют правильную компоновку, но 2-я строка неверна. Правильный макет должен быть таким, чтобы каждое изображение, находящееся посередине, было ниже двух других с обоих концов.
Проблема в CollectionViewCell. Я использую модуль, чтобы установить каждую нечетную ячейку ниже, чем каждая четная ячейка, но, поскольку во 2-й строке (или в каждой нечетной строке) модуль средней ячейки всегда будет четным выкладываю правильно, но это не дает мне то, что я хочу.
Как сделать так, чтобы макет был похож на изображение ниже?
Код:
override func viewDidLoad() {
super.viewDidLoad()
let layout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsetsMake(15, 0, 5, 0)
layout.scrollDirection = .vertical
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.translatesAutoresizingMaskIntoConstraints = false
// collectionView datasource, delegate, and cell registration set
view.addSubview(collectionView)
collectionView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
collectionView.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 5).isActive = true
collectionView.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -5).isActive = true
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 9
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! CustomCell
cell.item = indexPath.item
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let width = (view.frame.width - 25) / 3
return CGSize(width: width, height: width)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 25
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 5
}
Вот код внутри CollectionViewCell, который я использую для установки макета:
class CustomCell: UICollectionViewCell {
var item: Int = 0 {
didSet {
setLayout()
}
}
func setLayout() {
addSubview(imageView)
imageView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
imageView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
if item % 2 == 0 {
imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: -10).isActive = true
imageView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -10).isActive = true
} else {
imageView.topAnchor.constraint(equalTo: self.topAnchor, constant: 10).isActive = true
imageView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: 10).isActive = true
}
}
}