UICollectionView 无法显示所有内容

Posted

技术标签:

【中文标题】UICollectionView 无法显示所有内容【英文标题】:UICollectionView can't show all content 【发布时间】:2018-01-22 13:12:15 【问题描述】:

我用这个(用代码而不是故事板)初始化collectionview:

-(id) init
    self = [super init];
    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.page = 0;
    self.step = 20;
    self.subCateItems = [[NSMutableArray alloc] init];
    self.scaleFactor = [[UIScreen mainScreen] bounds].size.width / 375.f;
    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    layout.sectionInset = UIEdgeInsetsMake(9.f*self.scaleFactor, 6.f*self.scaleFactor, 0, 6.f*self.scaleFactor);
    _collectionView=[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    _collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^
        self.page = 0;
        [self updateData];
    ];

    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];
    [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [_collectionView setBackgroundColor:[UIColor whiteColor]];
    [self.view addSubview:_collectionView];

    return self;

但集合视图似乎无法显示所有集合单元:

如何解决这个问题?

正如 cmets 所建议的,我已经捕获了视图的视图层次结构

【问题讨论】:

似乎更多是约束或 CollectionView 偏移的问题。您能否通过 XCode developer.apple.com/library/content/documentation/… 中的 Hierarchy Debug 检查框架是否正确? 嗨,@Larme 我用代码而不是情节提要添加了这个集合视图,我该如何用代码解决这个问题? 检查你给collectionview的约束。 【参考方案1】:

从您的滚动视图指示器来看,滚动视图的底部插图设置不正确,因为它与UITabBar 重叠。代码在 Swift 中,但你应该明白 ;-)

我通常这样做是为了让我的滚动视图显示在顶部:

_collectionView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, -50, 0) 
_collectionView.contentInset = UIEdgeInsetsMake(0, 0, -50, 0)

另外,请确保这样做:

self.automaticallyAdjustsScrollViewInsets = false 

【讨论】:

嗨,由于我只使用 collectionView 作为@property 并实现了UICollectionView 的协议,所以找不到修改self.automaticallyAdjustsScrollViewInsets 的地方,但使插入工作 太棒了! automaticallyAdjustsScrollViewInsets 实际上是UIViewController 上的一个属性,它可能在很多方面都很方便,不仅仅是在这种情况下【参考方案2】:

第一个问题来了

    self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

一定是这样的

    self.view = [[UIView alloc] initWithFrame:self.view.bounds];

那么,self 是谁?是UITabBarController的标签吗? 如果是,一切都很好。如果不是,那么您将设置正确的 inset ofUICollectionView

【讨论】:

以上是关于UICollectionView 无法显示所有内容的主要内容,如果未能解决你的问题,请参考以下文章

根据内容居中水平 UICollectionView

如何将视频从 ALAsset 显示到 UICollectionview ios

如何快速在uicollectionview中动态访问单元格属性

UICollectionView 无法折叠或移除补充视图

为啥 uicollectionview 没有显示任何内容

UICollectionView 只显示最后一个单元格