在方向更改时动画UICollectionView

hpi*_*que 15 iphone uiinterfaceorientation ios uicollectionview

考虑一个UICollectionView,它在横向和纵向方向上具有不同数量的项目和不同的布局(即:间距).

当设备旋转时,需要做些什么才能对这些更改进行动画处理?我在" 收集视图编程指南"中找不到如何处理旋转的任何提及.

tit*_*coy 41

没有必要重新加载集合视图的数据 - 调用[collectionView.collectionViewLayout invalidateLayout]将导致集合视图更新其布局.

shouldInvalidateLayoutForBoundsChange:在UICollectionViewLayout子类中重写YES将导致在invalidateLayout集合视图的边界发生更改时(包括其大小更改时以及用户滚动其内容时)自动调用.

  • 还有我的夜晚. (11认同)

chr*_*ton 13

我根据方向有不同数量的部分,自动旋转没有改变它.我不得不添加对collectionView的调用来重新加载数据.我正在使用UICollectionViewController,如果您还有其他内容,请调整到您自己的集合视图属性:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(    NSTimeInterval)duration {
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.collectionView reloadData];
}
Run Code Online (Sandbox Code Playgroud)


CZ5*_*Z54 6

最快捷的方式是混合所有其他答案.

只需在ViewController中添加以下行:

override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    self.mCollectionView.collectionViewLayout.invalidateLayout()
}
Run Code Online (Sandbox Code Playgroud)

您不需要reloadData.