gpt4 book ai didi

ios - UICollectionView 中仅某些单元格之间的自定义间距

转载 作者:行者123 更新时间:2023-11-28 15:06:41 25 4
gpt4 key购买 nike

我正在尝试创建一个水平滚动且单行的 UICollectionView。可以将单元格动态添加到集合的末尾。我希望行为是当 UICollectionView 中有一定数量的单元格并添加一个新单元格时,第一个 x 单元格数量将压缩它们的间距,同时保持相同的大小。理想情况下,我希望第一个 x 单元格实际上彼此重叠一些(看起来像一个堆栈)以节省最大空间。 x 之后集合中的剩余单元格将以它们之间的正常间距显示。

视觉效果:

( ) ( ) ( ) ( ) ( ) 正常布局,其中 ( ) 是一个项目

当再添加两个项目时会变成这样:

((((( ) ( ) ( )

( ))))) ( ) ( ) 如果第一个项目在堆栈的顶部(我现在不介意哪个,堆栈很重要)

任何人都可以就如何实现这一目标提供任何帮助和建议吗?

最佳答案

对于任何感兴趣的人,我通过子类化 UICollectionViewFlowLayout 并如下覆盖来实现这一点。请记住,我在集合的末尾使用了一个额外的单元格作为 addCell 按钮,因此此实现说明了这一点,并将在添加 5 个真实项目后进行重新排列,您可以添加一个6日。当正常布局时,我的单元格的宽度为 50,最小间距为 10

override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
guard collectionView!.numberOfItems(inSection: 0) > 6 else {
return super.layoutAttributesForElements(in: rect)
}

let layouts = super.layoutAttributesForElements(in: rect)?.map { $0.copy() as! UICollectionViewLayoutAttributes }
for (index, layout) in layouts!.enumerated() {
var frame = layout.frame
frame.origin.x = frame.origin.x - (35.0 * CGFloat(index < 5 ? index : (index - (index - 4))))
layout.frame = frame
}

return layouts
}

关于ios - UICollectionView 中仅某些单元格之间的自定义间距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com