在正确的时间获取 UICollectionview 的边界/框架

Posted

技术标签:

【中文标题】在正确的时间获取 UICollectionview 的边界/框架【英文标题】:Getting the bounds/frame for UICollectionview at the right time 【发布时间】:2015-10-23 10:01:31 【问题描述】:

我正在编写一个应用程序(ios,Objective-C),它以包含按钮的 Collectionview 开头,根据按钮,我将推动下一个 CollectionViewcontroller 或 TableviewController 来呈现数据。

我正在使用下面列出的功能来调整单元格的大小以适应屏幕(尤其是从纵向转为横向等时)

我有以下问题。

当我从这个 collectionview 推送一个 tableviewcontroller 并返回到 collectionview 时,计算已正确完成,并且 collectionview 看起来应该如此。

但是当从另一个collectionview返回时计算是错误的(即宽度太高了),目前在Iphone 5s上测试并且宽度设置为低于400但是从另一个collectionview返回后整个视图的宽度记录为 560。

那么如何为我的 Collectionview 获得正确的边界/框架?

我还应该提到我正在使用 sizeclass "Any/Any",并且我的 collectionviewController 是从 UICollectionviewController 派生的,以便容纳 AdbannerView(将 collectionview 嵌入另一个视图中)

任何帮助都将不胜感激,下面的 sn-p 取自一些博客,效果非常好,但仅当堆栈中没有另一个 Collectionview 时。

    - (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout*)collectionViewLayout
     sizeForItemAtIndexPath:(NSIndexPath *)indexPath
    
    UICollectionViewCell *cell = [[[NSBundle mainBundle] loadNibNamed:@"WNCOllectionviewcell" owner:self options:nil] objectAtIndex:0];
    cell.frame = CGRectMake(0,0,CGRectGetWidth(_WNCollectionView.bounds)*0.4, CGRectGetHeight(cell.frame));
   CGFloat desiredHeight = (CGRectGetHeight(_WNCollectionView.bounds) / _collectionImages.count) * 1.45;
    NSLog (@"Height %.2f", CGRectGetHeight(_WNCollectionView.frame));
    NSLog(@"Width %.2f",CGRectGetWidth(_WNCollectionView.frame));
    return CGSizeMake(CGRectGetWidth(collectionView.bounds)*0.4, desiredHeight);

     

CollectionViewController 的声明

#import <UIKit/UIKit.h>

@import iAd;

@interface WNCollectionViewController : UIViewController      <UICollectionViewDelegate, UICollectionViewDataSource, ADBannerViewDelegate>
@property (strong, nonatomic) IBOutlet UICollectionView *WNCollectionView;
@end

【问题讨论】:

你确定collectionView_WNCollectionView 是同一个实例吗?如果不是,您打印的值错误 添加了 CollectionViewController 的声明...以便澄清 【参考方案1】:

我自己解决了这个问题,任何好心的读者都无法解决这个问题,所以请接受我的歉意。

在我的设置中,我有 CollectionViewController A,它调用 CollectionViewController B。两者都有 NavigationControllers。我错误地将 B 的输出直接与 CollectionViewController A 连接,而不是与 A 的 Navigationcontroller 连接,这产生了所有有趣的结果。以正确的方式连接它(通过导航控制器)完成了这项工作。

【讨论】:

以上是关于在正确的时间获取 UICollectionview 的边界/框架的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionView 中重新加载数据的正确方法是啥?

在 UICollectionView 中显示错误的图像

在 UICollectionView 底部加载其他单元格

带有图像数组的 UICollectionView 设置正确

UICollectionView 没有正确滚动

使用 UIImagePicker 拾取图像后重新加载 UICollectionView 的正确时间和位置