3

我目前正在尝试将 CollectionView 放入 Today Extension 中。但是有一些事情让我很困扰。

我想实现每个单元格都适合我的集合视图的一行。因此,根据项目数计算单元格宽度。

在 iPhone 上一切正常,但在 iPad 上看起来不太对劲。单元格宽度很大。所以我调试了我的代码,似乎 self.view.frame.width 或 self.view.bounds.width 返回屏幕的全宽,而不是通知中心的宽度。难怪我的细胞为什么这么大。我正在计算我的项目大小,如下所示:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat count = (CGFloat)[self.collectionView numberOfItemsInSection:0];
    return CGSizeMake(self.collectionView.frame.size.width/count, 80.0);;
}

所以我现在的问题是,我怎样才能在 ipad 上获得通知中心的“真实”宽度?

4

2 回答 2

1

只是在这里猜测,但根据我对 UICollectionView 的经验,我会说你需要计算你的单元格大小viewDidLayoutSubviews

当您的委托方法被调用时(可能不久之后viewDidLoad:),视图可能还没有正确调整大小,因此返回错误的帧大小(所有视图控制器都使用全屏大小进行初始化,然后调整大小以适应)。

这样做viewDidLayoutSubviews应该保证您的 collectionViews Frame 已经正确。不过,您需要重新加载您的 collectionView。

于 2015-03-24T12:03:09.097 回答
0

您确定 collectionview 的大小也正确调整了吗?您没有使用 self.view.bounds.size.width 而是使用 collectionview 的。

你有你的collectionview创建代码(我假设的loadview方法)和你的viewWillTransitionToSize/viewWillLayoutSubviews/viewDidLayoutSubviews实现吗?

于 2015-03-24T14:13:19.937 回答