滚动到下一个项目后,重新排列collectionViewCell

时间:2016-06-14 05:01:13

标签: ios swift2 uicollectionview

我有collectionView而我的collectionViewCell包含imageView,所以当我第一次加载我的视图时看起来很好,但是当我滚动浏览它时,它错位,看图像

我的collectionView单元格中有3张图像,第一张图像就位,而不是第二张和第三张图像 在滚动之前(image1)

enter image description here

滚动后的

(图像2)(当水平切换到下一个图像时)

enter image description here

我的collectinView支持水平滚动和(粉红色背景)是我的单元格,(黄色背景)是CollectionView,因为您可以看到,当我滚动到下一个图像时,我的单元格会有一些屏幕,任何想法如何解决这个???

我的代码:

tableView中的

extension TableViewController: UICollectionViewDelegate, UICollectionViewDataSource {
    func collectionView(collectionView: UICollectionView,
                        numberOfItemsInSection section: Int) -> Int {

        return contentImages[collectionView.tag].count
    }


    func shouldInvalidateLayoutForBoundsChange(newBounds: CGRect) -> Bool {
        return true
    }




    func collectionView(collectionView: UICollectionView,
                        cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell",
                                                                         forIndexPath: indexPath) as! CollectionViewCell

        //cell.imgView.frame = CGRectMake(0, 0, collectionView.frame.width, collectionView.frame.height)

        cell.imgViewOfCell.contentMode = .ScaleAspectFit


        cell.imgViewOfCell.image = ResizeImage(UIImage(named: contentImages[collectionView.tag][indexPath.item])!, targetSize: CGSizeMake( cell.imgViewOfCell.frame.width ,  cell.imgViewOfCell.frame.height))
        //imageView.image = UIImage(named: imageModel[collectionView.tag][indexPath.item])

        return cell
    }

}

collectionViewCell:

class CollectionViewCell: UICollectionViewCell {

    @IBOutlet var imgViewOfCell: UIImageView!


    override func awakeFromNib() {
        imgViewOfCell.frame = self.bounds
        self.contentView.setNeedsLayout()

        }

}
tableViewCell中的

    func setCollectionViewDataSourceDelegate
    <D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
    (dataSourceDelegate: D, forRow row: Int) {

    collectionView.delegate = dataSourceDelegate
    collectionView.dataSource = dataSourceDelegate
    collectionView.tag = row
    collectionView.reloadData()
}


var collectionViewOffset: CGFloat {
    get {
        return collectionView.contentOffset.x
    }

    set {

        collectionView.contentOffset.x = newValue

    }
    }

知道怎么解决这个问题吗?请让我知道我做错了什么或我错过了什么。

1 个答案:

答案 0 :(得分:0)

结束了这一点,经过调试我知道我的Cell x来源不准确,所以我在cellForItemAtIndexPath上手动计算这个:

   func collectionView(collectionView: UICollectionView,
                    cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell",
                                                                     forIndexPath: indexPath) as! CollectionViewCell


    cell.imgViewOfCell.contentMode = .ScaleAspectFit

    if indexPath.row == 0 {

        cell.frame.origin.x = 0
    }else if indexPath.row == 1 {

        cell.frame.origin.x = self.view.bounds.width

    }else if indexPath.row == 2 {

         cell.frame.origin.x = (self.view.bounds.width*2)

    }else if indexPath.row == 3 {

        cell.frame.origin.x = (self.view.bounds.width*3)
    } 
     ....... }