Я создаю представление коллекции, как показано ниже

 lazy var testCollectionView: UICollectionView = {

    let collectionViewLayout = UICollectionViewLayout();
    let testCollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout)
    testCollectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
    testCollectionView.translatesAutoresizingMaskIntoConstraints = false
    testCollectionView.backgroundColor = UIColor.purple
    testCollectionView.dataSource = self
    testCollectionView.delegate = self
    return testCollectionView

}()

Затем с помощью расширения для контроллера просмотра для делегатов

extension ViewController:  UICollectionViewDataSource{

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        print("jjjjjjjj")
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

        print("vjvjvjvhvjvjhvgh")
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        cell.contentView.backgroundColor =  UIColor.magenta
        return cell
    }


}

extension ViewController : UICollectionViewDelegate{


}

extension ViewController: UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
        print("sdfsf")
        return CGSize(width: collectionView.bounds.size.width - 16, height: 120)
    }
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        print("sdsdsdsdsdsd")
        return 8
    }

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 0
    }

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets.init(top: 8, left: 8, bottom: 8, right: 8)
    }
}

Я добавил Collectionview в Viewdidload с ограничениями для CollectionView

Я мог видеть фиолетовый просмотр коллекции, но я не мог видеть ячейку Collectionview. Даже когда я добавляю точку останова в делегат UICollectionViewDataSource, он переходит к количеству элементов, но не доходит до indexpath cellForItemAt

self.view.addSubview(testCollectionView)

self.view.addConstraint(NSLayoutConstraint(item: testCollectionView, attribute: .width , relatedBy: .equal, toItem: self.view, attribute: .width, multiplier: 0.7, constant: 0.0))

self.view.addConstraint(NSLayoutConstraint(item: testCollectionView, attribute: .height, relatedBy: .equal, toItem: self.view, attribute: .height, multiplier: 0.7, constant: 0.0))


self.view.addConstraint(NSLayoutConstraint(item: testCollectionView, attribute: .centerY, relatedBy: .equal, toItem: self.view, attribute: .centerY, multiplier: 1.0, constant: 0.0))

self.view.addConstraint(NSLayoutConstraint(item: testCollectionView, attribute: .centerX, relatedBy: .equal, toItem: self.view, attribute: .centerX, multiplier: 1.0, constant: 0.0))
2
Ruban4Axis 17 Ноя 2018 в 18:48

1 ответ

Лучший ответ

Продолжая мой комментарий, убедитесь, что ваш делегат макета соответствует макету:

lazy var testCollectionView: UICollectionView = {
    let collectionViewLayout = UICollectionViewFlowLayout()
    let collectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout)
    // further setup
    return collectionView
}()

extension ViewController: UICollectionViewDelegateFlowLayout {

    // Implement delegate functions as necessary
}
1
JonJ 18 Ноя 2018 в 09:46