动态大小的UICollectionView单元格

55

在此输入图片描述

1) 如何使用UICollectionView实现上图效果?

2) 我尝试了-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath方法并传递不同的大小,但它会在单元格之间留下空白。 我可以清空这些空白吗? 我想让每个单元格具有不同的高度和宽度。

当前输出: 在此输入图片描述.


有人能给我一个使用子类化UICollectionViewFlowLayout的例子吗? - Akshit Zaveri
我已经尝试了一个很棒的例子NHBalancedFlowLayout。但是一行中所有图像的高度都相同。如果有人可以建议我一些方法,使每个图像的高度动态变化,我将不胜感激。 - Akshit Zaveri
我不确定你之前是否查看过这个参考资料。但是我可以说,这是我曾经发现的最好的教程,用于制作动态集合视图。beginning-uicollectionview-in-ios-6-part-12。祝你好运! - Pawan Rai
是的,但这需要根据它自定义高度并调整其他项目。 - Arpit B Parekh
4个回答

49

非常抱歉回复晚了……但是也许这可以帮助那些还没有找到答案的人。 如果您将图像存储在数组中,您只需引用图像大小并从那里对单元格大小进行调整:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UIImage *image = [imageArray objectAtIndex:indexPath.row];
//You may want to create a divider to scale the size by the way..
    return CGSizeMake(image.size.width, image.size.height); 
}

希望这有所帮助...


9
你试过这个吗?因为我在一开始尝试了它,但它不起作用。 - Akshit Zaveri
我已经尝试过了,但是使用了自定义的UIImage对象。为什么它不起作用呢?我刚刚进行了一次健全性检查,对我来说它是有效的。我必须使用一个分隔符,因为图像太大了...在我的情况下,我只设置了一个浮点数divider = 2; - RobMillerJ25
为什么这会给我一个“未捕获的异常错误”? - Tejas K
1
UIImage *image = [UIImage imageNamed:[arrRecipeImages objectAtIndex:indexPath.row]]; 这对我很有效。 - Tejas K
只需返回 return image.size - Laszlo
显示剩余3条评论

17
也许这种布局适合你的需求。请查看此项目: https://github.com/betzerra/MosaicLayout 我不确定它是否完全满足你的要求,但在最坏的情况下,它可能会帮助你编写自定义的UICollecionViewFlowLayout(这是实现你目标的唯一方法)。

2
完全不用客气。祝你好运!只需克隆项目并运行MosaicCollectionView.xcodeproj,希望它正是你所需要的 :) - Alexander Tkachenko
1
这是一个更受欢迎的项目:https://github.com/chiahsien/CHTCollectionViewWaterfallLayout 我在我的一个项目中使用它,它完美地工作了。 - Murlakatam
5
嗨!我是MosaicLayout的作者,如果您在使用中遇到任何问题,请告诉我 :-) - betzerra
2
谢谢@betzerra,我会尽力从超级繁忙的日程中抽出一些时间。我知道我需要快速学习它。在学习过程中,您的MosaicLayout将在许多方面帮助我。 :) - Akshit Zaveri
谢谢,这解决了我的问题。非常感谢您创建了这样一个精美的 Collection View。 - Arpit B Parekh
显示剩余5条评论

4
你无法使用标准的UICollectionViewFlowLayout来实现你问题中的结果,因为它在基本实现(未经子类化)中创建了一个网格布局。
为了获得你想要的效果,你应该创建自己的UICollectionViewLayout(或者可能是UICollectionViewFlowLayout)子类,在其中执行放置每个项目所需的所有计算以及设置正确框架的操作。
点击这里查看一个很好的教程,点击这里查看与你想要的类似的内容。

谢谢。我会看一下的。我已经尝试过 RFQuiltLayout 但它有一些严重的错误。我会尝试另一个链接并在这里更新。 - Akshit Zaveri
http://applidium.github.io/ADLivelyCollectionView/ 不完全符合您的需求,但可能会给您一个起点。 - brandonscript

2

在一排图片中,不要创建不同高度的变量图片,而是固定图片的相同高度,但可以在一行中具有不同的宽度。创建这样的组合并显示,您可以重复使用同一单元格来呈现不同宽度的一个或多个图像的不同高度。我已经做到了这一点,它给人们带来了与谷歌图像搜索相同的感觉。


我目前无法与您分享图片,但将与您分享与您发布的图片相同的图片。 - Ashish Khobragade
我不想要谷歌图片搜索的感觉..这是完全不同的设计..高度和宽度都是动态的。 - Akshit Zaveri
@AkshitZaveri,你找到了解决办法吗?我也有同样的问题。 - Manjit Singh
不行。@ManjitSingh,尝试了很多方法,但最终只能使用固定宽度的单元格。 - Akshit Zaveri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接