2016-07-22 86 views
1

我用144個單元格製作了一個收集視圖。我讓他們設置爲單個選擇。我一直在玩我已經有一段時間的設置,但是任何能夠正確顯示單元格的設置都存在這個問題,即兩個特定單元格的大小一致。請注意,只有在iPad Pro上進行測試時纔會出現問題。他們經常會在我無法複製的情況下重新調整大小,以便來回更改圖像。我嘗試只在絕對必要時調用reloadData(),並在indexPath函數中調用reload個別單元。我已經測試了我能想到的一切,以防止這成爲一個問題。任何指向正確方向的指針都會受到高度讚賞!收集視圖單元格的內容大小不正確

這裏是一個形象: enter image description here

這裏是我的代碼:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ChartViewCell 
    cell.setColor(colorArray[indexPath.section][indexPath.row]) 
    cell.overlay?.image = cell.whichColor.toImage() 
    return cell 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 24 
} 

func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
    return 12 
} 

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

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets { 
    return UIEdgeInsetsMake(0, 0, 0, 0) 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    let screenRect: CGRect = collectionView.bounds 
    let screenWidth: CGFloat = screenRect.size.width 
    let cellWidth: CGFloat = screenWidth/24 
    //Replace the divisor with the column count requirement. Make sure to have it in float. 
    let size: CGSize = CGSizeMake(cellWidth, cellWidth) 
    return size 
} 

回答

0

我通過以下操作解決了這一問題:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ChartViewCell 
    cell.setColor(colorArray[indexPath.section][indexPath.row]) 
    cell.overlay?.image = cell.whichColor.toImage() 

    let screenRect: CGRect = collectionView.bounds 
    let screenWidth: CGFloat = screenRect.size.width 
    let cellWidth: CGFloat = screenWidth/24 
    cell.singleCellWidthConstraint.constant = cellWidth - 8 
    cell.overlayWidthConstraint.constant = cellWidth - 4 
    return cell 
} 

我只是增加了一個寬度約束的圖像,並且在細胞中加入類的出口到它們。然後我刪除了底部和右邊的約束,並在圖像上添加了1:1約束。它像所有設備上的魅力一樣工作!

1

我與我以前的項目遇到同樣的問題。我設法通過使用這個庫來解決問題:Snapkit。導入庫吊艙和cellForItemAtIndexPath

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! ChartViewCell 

    let width = self.view.bounds.size.width/24 
    cell.overlay.snp_makeConstraints { (make) -> Void in 
     make.width.equalTo(width) 
     make.height.equalTo(width) 
    } 
    cell.setColor(colorArray[indexPath.section][indexPath.row]) 
    cell.overlay?.image = cell.whichColor.toImage() 
    return cell 
} 

就只放頂實現,而且在故事板的ImageView的領先約束。希望能幫助到你。

+0

我很欣賞這個答案,但是我寧願不要將第三方庫添加到我的項目中以查找此錯誤。我會嘗試以這種方式設置限制,然後看看它是否有幫助。我現在將它們連接到單元格的所有側面。 – Sethmr

+0

@Sethmr好的。讓我知道你是否可以解決這個問題,所以它可以幫助我的下一個項目。非常感謝 –

+0

我修好了!感謝這個想法的幫助!我會拋出我自己的答案。 – Sethmr

相關問題