我在自己的UICollectionView中添加了一个UIViewController,并为其创建了一个自定义单元格。

我使用sizeForItemAtIndexPath方法设置单元格的大小,并将每个单元格的高度和宽度都设置为UIScreen.mainScreen().bounds.width/2。因此,从本质上讲,每个单元格都是屏幕宽度的一半,并且高度相同。

然后,我在单元格内部添加了一个UIImageView,每个边缘固定到单元格的相对边缘,以便 ImageView 填充该单元格。我也有一个UILabel,它在单元格中垂直和水平居中。

但是,在初次加载时,单元格的大小正确,但左上角的小方块中的内容要小得多。 (在下图中看到,我已将单元格的contentView背景色设置为绿色,并将imageView背景色设置为红色)。

ios - 第一次加载时UICollectionViewCell内容大小错误-LMLPHP

然后向下滚动一点(我假设一个可重复使用的单元格已出队),所有单元格都很好(并在向上滚动后保持良好)。

ios - 第一次加载时UICollectionViewCell内容大小错误-LMLPHP

是什么导致第一次加载时内容没有受到适当限制?

更新

我的UIViewController中的一些代码:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("PrevDrawCell", forIndexPath: indexPath) as? PrevDrawCell

        if cell == nil {
            cell = PrevDrawCell()
        }

        cell!.drawVC = self
        cell!.imageShortCode = self.tempImageURLs[indexPath.row]

        // Pull image (async) and set after download
        cell!.setupImage()

        cell!.contentView.backgroundColor = UIColor.greenColor()
        cell!.coverView.backgroundColor = UIColor.redColor()

        cell!.dateLabel.font = UIFont(name: "HelveticaNeue-Light", size: 26)
        cell!.dateLabel.text = "\(self.tempImageURLs.count-indexPath.row)/9"

        return cell!
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let size = UIScreen.mainScreen().bounds.width/2
        return CGSize(width: size, height: size)
}


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

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

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

最佳答案

看起来它仍然为contentView保留了100x100px的基本尺寸,而单元格本身已经获得了正确的尺寸。您可以在返回单元格之前强制布局重置以添加以下行:

cell?.layoutIfNeeded()

关于ios - 第一次加载时UICollectionViewCell内容大小错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32593117/

10-10 04:54