UICollectionViewCell布局问题iOS9

前端之家收集整理的这篇文章主要介绍了UICollectionViewCell布局问题iOS9前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
自从我搬到新的iOS9和 Xcode 7后,我偶然发现了我的应用程序中的一个UICollectionView问题.

显然,UICollectionView似乎没有正确地更新UICollectionViewCell布局和约束,直到它被重用.

图片说得比文字更好 – 这就是UIViewController首次出现时的样子:

然而,这不是正确的布局,并且当我将UICollectionView水平向左滑动时,我得到了新出现的单元格的正确布局:

当我向后滑动时,旧的细胞不正确,现在重复使用并且看起来很好.

现在,就像升级到iOS9和Xcode 7之前一样,我想要的效果是即使首次出现,单元格也具有正确的布局.

为方便起见,这里有更多关于如何设置UICollectionView以及它在XIB中的约束的细节:

代码中,它非常标准:

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

    cell.imageView.backgroundColor = UIColor.lightGrayColor()
    cell.bottomName.text = "StackOverflow"

    return cell
}

func collectionView(collectionView: UICollectionView,numberOfItemsInSection section: Int) -> Int {
    return self.matchmakers.count
}

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

每次我更新数据源(self.matchmakers)时,我都调用了self.collectionView.reloadData()

我注意到的最后一件事非常奇怪,当使用Xcode调试调试视图层次结构时,UICollectionViewCell从未正确呈现子视图,只是给了我一个默认的UIView:

解决方法

解决这个问题:

>使用Nib(.xib)文件创建自定义UICollectionViewCell.
>在自定义UICollectionViewCell中,重写didMoveToSuperView()方法添加此项

self.setNeedLayout()

self.layoutIfNeeded()

3.在你的UIViewController viewDidLoad()方法

self.collectionView.registerNib(UINib(nibName:“yourNibName”,bundle:nil),forCellWithReuseIdentifier:“Cell”)

——–更新20150923

只需要第2步,重写didMoveToSuperView方法即可添加

self.setNeedLayout()

self.layoutIfNeeded()

在您的自定义UICollectionViewCell类中.

谢谢@macayer

猜你在找的iOS相关文章