collectionView (: layout: sizeForItemAt :) возвращаемое значение не соблюдается / не используется - PullRequest
0 голосов
/ 09 мая 2020

Я настраиваю представление коллекции и делегата для этого представления, sizeForItemAt: вызывается, но не соблюдается. Установка точек останова в отладчике приводит к вызовам в следующем порядке: вызывается

  1. numberOfItemsInSection:, возвращается 4
  2. sizeForItemAt: возвращается 4 раза, возвращая "маленький" прямоугольник
  3. 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)
    }
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...