如何在屏幕旋转后调用sizeForItemAtIndexPath方法

时间:2015-12-07 04:50:46

标签: ios objective-c swift uitableview uicollectionview

我已经使我的集合视图单元格以编程方式计算,并且我使用sizeForItemAtIndexPath方法设置单元格的大小。

但是当屏幕旋转时,我需要重新计算尺寸并为细胞设置它们。那么,如何在屏幕旋转后再次调用该函数?

顺便说一句,我知道didRotateFromInterfaceOrientation方法,我遇到的唯一问题是我不知道应该如何调用再次设置单元格的大小。

谢谢

4 个答案:

答案 0 :(得分:3)

使用更新的UIViewController方法的另一种方法

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {

     } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {
         [self.collectionView.collectionViewLayout invalidateLayout];
     }];

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

答案 1 :(得分:1)

您可以使用此方法重新加载集合视图:当设备更改其方向时,将调用此方法。重新加载collectionview将调用sizeForItemAtIndexPath。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [collectionView reloadData]; // change collectionView with your collection view
}

答案 2 :(得分:0)

计算细胞的动态可以用自动计算代替。

+---+-----+-----+
|   |     |     |
|   |     |     |
|   |     +=====+
+---+     |  |  |
|   |     |  |  |
|   +-+   +=====+
|   | |   |     |
|   | +-+ |     |
|   |   | |     |
|   |   +-+     |
|   |     |_____|
|   |     |     |
+---+-----+-----+

答案 3 :(得分:0)

试试这个

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [collectionView reloadInputViews]; 
}