我如何正确地要求集合视图在方向更改时调整其单元格的大小?

时间:2017-03-03 14:31:12

标签: ios swift

我有一个简单的UICollectionView,我想在视图的宽度太大时更改单元格大小。

1 /我在siZeForItemAt

中完成工作
 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let collectionWidth = collectionView.frame.width
    var width:CGFloat

    if collectionWidth > 500 {
        width = collectionWidth / 4 - 8
        print("4 DE LARGE")
    } else {
        width = collectionWidth / 3 - 8
        print("3 DE LARGE")
    }

    return CGSize(width: width, height: width)
}

2 /我重写viewWillTransition以在我的collectionView上调用invalidateLayout,这样我的collectionView将在evry方向改变时重绘。

 override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

                self.collectionView.collectionViewLayout.invalidateLayout()

}

在第一个方向上改变它的效果很好。但如果我转到另一个视图,回到我的初始视图并回到之前的方向,则不会调用sizeForItemAt ...而且我的单元格的大小不会改变...我不会'明白为什么......我做错了什么?

1 个答案:

答案 0 :(得分:0)

是否有同样的问题通过将宽度与UIScreen相关联来修复它。在我的情况下,单元格从左向右扩展。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let width = UIScreen.main.bounds.width
    return CGSize(width: width, height: 150)
}