Я настраиваю представление коллекции и делегата для этого представления, sizeForItemAt:
вызывается, но не соблюдается. Установка точек останова в отладчике приводит к вызовам в следующем порядке: вызывается
numberOfItemsInSection:
, возвращается 4 sizeForItemAt:
возвращается 4 раза, возвращая "маленький" прямоугольник cellForItemAt:
вызывается 4 раза, возвращая ячейку с «большим» изображением в ImageView
результат : отображаются 4 большие ячейки
Ячейка определена в раскадровке.
Это должно быть что-то простое, но я не могу, хоть убей, вытащить это.
class MyDataSource: NSObject, UICollectionViewDataSource {
let images = [UIImage(named: "card-2-clubs"), UIImage(named: "card-3-diamonds"), UIImage(named: "card-4-hearts"), UIImage(named: "card-5-spades")]
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: CardCell.self), for: indexPath) as! CardCell
cell.imageView.image = images[indexPath.row]
return cell
}
}
class MyDelegate: NSObject, UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 50, height: 70)
}
}
class CardCell: UICollectionViewCell {
@IBOutlet var imageView: UIImageView!
}
I не думаю, что это проблема, но вот код создания:
class ViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
presentCollectionView()
}
var dataSource = MyDataSource()
var delegate = MyDelegate()
private func presentCollectionView() {
if let cvc = self.storyboard?.instantiateViewController(identifier: "CollectionViewController") as? UICollectionViewController {
cvc.modalPresentationStyle = .fullScreen
cvc.collectionView.dataSource = dataSource
cvc.collectionView.delegate = delegate
present(cvc, animated: true)
}
}
}