我在故事板中设置了一个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
。这很好,但因为我不想硬编码任何尺寸,所以我现在主要关注的是初始加载到正确的尺寸。
感谢您提供的任何帮助。