在Today-Extension中获取Notification-Center的宽度

我目前正在试图将一个CollectionView放在Today Extension中。 但有一件事困扰我。

我想实现每个单元格都适合我的collections视图中的一行。 所以计算细胞的宽度,取决于物品的数量。

一切工作正常在iPhone上,但在iPad上,它只是不正确。 单元格的宽度是很大的。 所以我debugging我的代码,似乎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上的“真正的”宽度?

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

当你的委托方法被调用(可能在viewDidLoad:之后不久),视图可能没有正确resize,因此返回错误的帧大小(所有的viewcontroller初始化全屏幕大小,后来resize适合)。

viewDidLayoutSubviews做,应该保证你的collectionViews框架已经是正确的了。 你需要重新加载你的collectionView。

你确定collectionview也是正确resize吗? 您没有采取self.view.bounds.size.width而是采集视图。

你有你的collectionview创build代码(我承担的loadview方法)和你的viewWillTransitionToSize / viewWillLayoutSubviews / viewDidLayoutSubviews实现?