设置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];
}
答
您可以通过继承UICollectionViewFlowLayout和覆盖方法
-(CGSize)collectionViewContentSize
{ //Get the collectionViewContentSize
CGSize size = [super collectionViewContentSize];
if (size < minimumSize) return minimumSize;
else return size;
}
编辑做到这一点: 我才意识到,你说你不想要布局的子类。无论如何,我subclassed UICollectionViewFlowLayout并只修改collectionViewContentSize方法。它为我保留了标准的垂直布局。编号:https://stackoverflow.com/a/14465485/2017159。这里说它UICollectionViewFlowLayout只支持一个方向(垂直或水平),所以它应该很好?
答
这是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;
}
令人惊叹:)感谢您的回答! –