在dataReload之前作为popover segue呈现时,CollectionView大小是错误的

时间:2015-01-24 15:53:45

标签: ios ipad uicollectionview uistoryboard uipopovercontroller

我在故事板中设置了一个segue,作为“作为Popover存在”。 destinationViewController是嵌入在NavigationController中的UICollectionViewController。加载Popover视图时,我的collectionView报告它的大小基本上是iPad窗口的完整大小。但是,一旦我调用[self.collectionView reloadData],collectionView就会正确地将其大小视为popoverViewController的大小。这是我用来调整collectionViewCell的大小(它基于collectionView的大小)

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGSize collectionViewBounds = collectionView.bounds.size; //768x1004 when the Popover is first loaded
                                                             //400x644 after reloadData is called
    int navigationHeight = self.navigationController.navigationBar.bounds.size.height;
    int toolbarHeight = self.navigationController.toolbar.bounds.size.height;
    int statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;

    int cellHeight = collectionViewBounds.height - (navigationHeight + statusBarHeight + toolbarHeight);
    int cellWidth = collectionViewBounds.width;
    return CGSizeMake(cellWidth, cellHeight);
} 

我尝试手动将CGSize collectionViewBounds设置为我设置popoverView的大小,但之后我的数据没有加载到collectionViewCell,直到我执行了dataReload并且此函数也停止了工作:

- (void) snapToCellAtIndex:(NSIndexPath *)index withAnimation:(BOOL) animated
{
    [self.collectionView scrollToItemAtIndexPath:index atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:animated];
}

collectionView在没有加载数据的情况下在两个单元格之间滚动,而不是捕捉到index。这很好,但因为我不想硬编码任何尺寸,所以我现在主要关注的是初始加载到正确的尺寸。

感谢您提供的任何帮助。

0 个答案:

没有答案