UICollectionView重叠单元格

时间:2017-02-06 15:54:21

标签: ios swift uicollectionview uicollectionviewlayout

我有一个我以编程方式创建和添加的UICollectionView但由于某些原因在运行时第1节和第2节重叠,它们都在同一个地方开始:

这是我的实现(代码是swift 2.3,因为这是项目要求):

  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = lightGreyColor
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 15, right: 0)
    layout.minimumInteritemSpacing = 0.5
    layout.minimumLineSpacing = 0.5
    layout.scrollDirection = UICollectionViewScrollDirection.Vertical
  //  layout.headerReferenceSize = CGSize(width: view.bounds.width, height: 30)

    let collectionViewFrame = CGRect(x: 0, y: 0, width: view.bounds.width, height: viewHeight)
    collectionView = UICollectionView(frame: collectionViewFrame, collectionViewLayout: layout)

    collectionView.allowsSelection = true
    collectionView.bounces = true
    collectionView.scrollEnabled = true
    collectionView.hidden = false
    collectionView.pagingEnabled = false
    collectionView.backgroundColor = lightGreyColor
    collectionView.showsVerticalScrollIndicator = false
    collectionView.showsHorizontalScrollIndicator = false

    collectionView.delegate = self
    collectionView.dataSource = self

    view.addSubview(collectionView)

    collectionView.registerNib(UINib(nibName: "SmallDiscoverItemCollectionViewCell", bundle: NSBundle.mainBundle()), forCellWithReuseIdentifier: "SmallDiscoverItemCollectionViewCell")

    collectionView.registerClass(NewDiscoverTopCollectionViewCell.self, forCellWithReuseIdentifier: "NewDiscoverTopCollectionViewCell")
    collectionView.registerClass(TopHeaderCell.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "TopHeaderCell")

    greedoCollectionViewLayout = nil
    greedoCollectionViewLayout1().rowMaximumHeight = collectionView.bounds.width/1.8
    greedoCollectionViewLayout1().fixedHeight = false

}


func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    switch indexPath.section {
    case 0:
        return CGSize(width: collectionView.bounds.width, height: 200)
    case 1:
        return CGSize(width: collectionView.bounds.width, height: 200)
    default:
        return self.greedoCollectionViewLayout1().sizeForPhotoAtIndexPath(indexPath)
       }

   }
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
 switch (indexPath.section) {
    case 0: let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NewDiscoverTopCollectionViewCell", forIndexPath: indexPath) as! NewDiscoverTopCollectionViewCell

        return cell

    case 1: let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NewDiscoverTopCollectionViewCell", forIndexPath: indexPath) as! NewDiscoverTopCollectionViewCell

        return cell

    case 2: let cell = collectionView.dequeueReusableCellWithReuseIdentifier("SmallDiscoverItemCollectionViewCell", forIndexPath: indexPath) as! SmallDiscoverItemCollectionViewCell
    let item = usersItems[indexPath.item]
    return cell
 }

这是重叠的最终结果:第0和第1部分并且具有绿色背景,而在它们之间存在这种差距。虽然第2部分有很多图像:

enter image description here

1 个答案:

答案 0 :(得分:0)

出于某种奇怪的原因,UICollectionViewCell初始化为等于其大小的y位置。为了解决这个问题,我刚刚在UICollectionViewCell

中添加了它
override init(frame: CGRect) {
let noProblemFrame = CGRect(x: 0, y: 0, width: frame.width, height: frame.height)
super.init(frame: noProblemFrame)