设置UICollectionView的最小内容大小

问题描述:

我希望能够在UICollectionView中设置内容大小的最小高度,所以我可以隐藏/显示UISearchbar,类似于在iBooks上完成的方式。设置UICollectionView的最小内容大小

但是,我不想为继承UICollectionView的标准垂直布局而继承布局。

有什么想法?

你可以试试这个快速解决方案,如果你有足够的物品填满屏幕,搜索栏将被隐藏。当然,您可以使用任何自定义视图更改下面的UISearchBar。

collectionView.contentInset = UIEdgeInsetsMake(44.0, 0.0, 0.0, 0); 
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, -44, collectionView.frame.size.width, 44)]; 
[collectionView addSubview:searchBar]; 
if([items count] != 0){ 
    [collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:NO]; 
} 

完全相同的另一个解决方案是使用补充视图。我刚刚走了。创建UICollectionReusableView的子类,请确保您设置页眉参考尺寸的流布局

[flowLayout setHeaderReferenceSize:CGSizeMake(0, 44.0)]; 

注册集合视图

[playersCollectionView registerClass:[MySupplementaryView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MyHeader"]; 

的补充视图和执行UICollectioViewDataSource方法

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 
{ 
    MySupplementaryView *header = nil; 

    if ([kind isEqual:UICollectionElementKindSectionHeader]){ 
     header = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"MyHeader" forIndexPath:indexPath]; 
     header.headerLabel.text = @"bla bla"; 
    } 
    return header; 
} 

最后,在每次重新加载后,在第一个项目的开始处重新定位收集视图以隐藏searchBar /标题视图。

if([items count] != 0){ 
    [collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:NO]; 
} 

教程补充意见techotopia.comappcode.commobinius

您可以通过继承UICollectionViewFlowLayout和覆盖方法

-(CGSize)collectionViewContentSize 
{ //Get the collectionViewContentSize 
    CGSize size = [super collectionViewContentSize]; 
    if (size < minimumSize) return minimumSize; 
    else return size; 
} 

编辑做到这一点: 我才意识到,你说你不想要布局的子类。无论如何,我subclassed UICollectionViewFlowLayout并只修改collectionViewContentSize方法。它为我保留了标准的垂直布局。编号:https://*.com/a/14465485/2017159。这里说它UICollectionViewFlowLayout只支持一个方向(垂直或水平),所以它应该很好?

+0

令人惊叹:)感谢您的回答! –

这是khangsile的答案的调整版本。 仅加盖实际上小于最小尺寸的尺寸

- (CGSize)collectionViewContentSize 
{ 
    CGSize size = [super collectionViewContentSize]; 

    size.width = MAX(size.width, self.minimumContentSize.width); 
    size.height = MAX(size.height, self.minimumContentSize.height); 

    return size; 
}