获取Today Extension中通知中心的宽度



我目前正在尝试将CollectionView放入Today扩展中。但有件事困扰着我。

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

在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上获得通知中心的"真实"宽度?

这里只是猜测,但根据我使用UICollectionView的经验,我认为您需要在viewDidLayoutSubviews中计算单元格大小。

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

viewDidLayoutSubviews中执行此操作应确保您的集合Views Frame已经正确。不过,您需要重新加载您的收藏视图。

您确定collectionview的大小也正确吗?您不是在自拍.view.bounds.size.width,而是在自拍collectionview。

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

最新更新