uicollectionview - 数据自动加载而不调用reloaddata

时间:2017-09-19 11:41:31

标签: ios swift uicollectionview uicollectionviewcell reloaddata

我有两个问题。

  1. 我想知道为什么我的集合视图会在不调用imageCollectionView.reloadData()的情况下自动加载数据。

    解决。见评论

  2. 为什么不调用func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize?我没有看到print("collectionViewLayout called")我试图修改单元格的大小,因此单元格的高度等于集合视图高度

    解决。见评论

  3. 以下是代码

    class ProductInternalDetailVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
    
        var selectedProduct: Product?
        @IBOutlet weak var imageCollectionView: UICollectionView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            imageCollectionView.delegate = self
            imageCollectionView.dataSource = self
        }
    
        func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return 2
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath as IndexPath) as! ProductInternalDetailCVC
            if indexPath.row == 0 {
                cell.productImage.image = selectedProduct!.image1
            } else {
                cell.productImage.image = selectedProduct!.image2
            }
            cell.productImage.frame = CGRect(x: 1, y: 1, width: cell.frame.size.width-2, height: cell.frame.size.height-2)
            return cell
        }
    
        func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
            //return CGSize(width: collectionView.frame.size.height-1, height: collectionView.frame.size.height-1)
            print("collectionViewLayout called")
            return CGSize(width: 10, height: 10)
        }
    }
    
    class ProductInternalDetailCVC: UICollectionViewCell {
        @IBOutlet weak var productImage: UIImageView!
    }
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

问题2:功能签名发生了一些变化。使用以下命令更改函数签名:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    ... 
}

不要忘记实施UICollectionViewDelegateFlowLayout协议。

问题1:

当进入ViewController时,如果这是你的问题,你的collectionView会自动加载collectionView的数据源。例如,在不更改视图的情况下对数据源进行更改(意味着不调用viewDidLoad方法)你将看不到更改直到你拨打imageCollectionView.reloadData()