UICollectionView Objective C中有2种不同的单元格大小

Posted

技术标签:

【中文标题】UICollectionView Objective C中有2种不同的单元格大小【英文标题】:2 different cell sizes in UICollectionView Objective C 【发布时间】:2016-04-10 11:38:32 【问题描述】:

我想使用 UICollectionView,可以创建如下布局:

如您所见,单元格有两种不同的大小。一个是行的 1/4,另一个是 3/4。是否可以使用 UICollectionView 创建这种布局?

谁能教我怎么做???或者有样品吗???我已经学习了很多教程和参考资料。但是还是不知道怎么弄。。

谢谢!

【问题讨论】:

是的,这是可能的。查看为您的UIControllerView 创建自定义布局,它构建了所需的界面;你可以开始例如阅读Apple Official Documentation 了解如何创建自定义布局。 这两个不同大小的单元格是否相关? @Fogmeister,你在考虑自定义UITableViewCell吗? :) @holex 是的。即使不相关,也可能更容易(对于刚接触集合视图的人)只是坚持使用表格视图并在单元格内创建布局。 :D 【参考方案1】:

好吧,我暂时对项目宽度进行了硬编码(72.0 和 23.0)。 5.0 的其余部分将用于临时间距和 edgeInsets。此代码将为您提供您想要的。

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section

    return 10.0;


- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section

    return 10.0;


#pragma mark - CollectionViewFlowLayout Methods

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    CGSize newSize = CGSizeZero;
    newSize.height = 100;

    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    CGSize screenSize = screenBounds.size;

    if(indexPath.item % 4 == 0 || indexPath.item % 4 == 3)
    
        // Size : 1/4th of screen
        newSize.width = screenSize.width * 0.23;
    
    else
    
        // Size : 3/4th of screen
        newSize.width = screenSize.width * 0.72;

    
    return newSize;


- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

    return UIEdgeInsetsMake(10, 2.0, 10, 2.0);

【讨论】:

【参考方案2】:

有不同的方法:

    您可以通过实现- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 方法来做到这一点。

    您可以按照以下教程逐步描述的方式完全自定义集合视图。

    http://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest

    从您的目标布局中,看起来可以通过使用 UITableviewCell 轻松获得外观(在单个单元格中加载 1/4 大小和 3/4 大小的单元格),并通过自动布局更改它们的大小.

【讨论】:

感谢您的回复,我已阅读自定义布局教程。但我无法理解。你能告诉我更多怎么做吗?很抱歉打扰您!【参考方案3】:
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    return [(NSString*)[arrayOfStats objectAtIndex:indexPath.row] sizeWithAttributes:NULL];

使用此方法,您可以返回不同大小的单元格。请参考此链接Dynamic cell width of UICollectionView depending on label width

【讨论】:

以上是关于UICollectionView Objective C中有2种不同的单元格大小的主要内容,如果未能解决你的问题,请参考以下文章

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示

UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]

UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示

将标题添加到 UICollectionView,而不是 UICollectionView 的部分

嵌套垂直 UICollectionView 和动态高度