繁体   English   中英

Swift:在 UICollectionView 中处理唯一/可变单元间距的最佳方法?

[英]Swift: Best way to handle unique/variable cell spacing in UICollectionView?

这是 iMessage 的图像。 您可以看到红色圆圈显示消息之间的间隔比橙色圆圈更大。

在此处输入图像描述

假设每个单元格都是聊天气泡之一:在UIKit中实现这种可变单元格间距的最佳方法是什么?

我有两个想法:

  1. 找到一种使用UICompositionalLayout实现可变项目间距的方法..?
  2. 使用我的UICollectionView注册一个具有额外填充的唯一单元格,并在我想要额外填充时将其加入deque

有没有人对实现UICollectionViewLayout可变单元格间距的最佳实践有建议?

谢谢!

更新:感谢@Larme 的评论,我很轻松地做到了这一点:

func getLayout() -> UICollectionViewCompositionalLayout {
    let size = NSCollectionLayoutSize.init(widthDimension: .fractionalWidth(1.0), heightDimension: .estimated(50))
    let item = NSCollectionLayoutItem.init(layoutSize: size)
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: size, subitems: [item])
    let section = NSCollectionLayoutSection.init(group: group)
    section.interGroupSpacing = 2.0 // group spacing
    let config = UICollectionViewCompositionalLayoutConfiguration()
    config.interSectionSpacing = 16 // section spacing
    return UICollectionViewCompositionalLayout.init(section: section, configuration: config)
}

然后,它就像拥有一个 function 一样简单,它决定何时将 append 到上一节与初始化一个新节。 这是我的一个例子:

func addMessages(_ messages:[Message]) {
    var snap = self.data.snapshot()
    
    for i in messages {
        // If prev and current message has same origin, use prev section
        if snap.sectionIdentifiers.last?.origin == i.origin {
            snap.appendItems([i], toSection: snap.sectionIdentifiers.last!)
        // Else create a new section
        } else {
            snap.appendSections([Section(origin: i.origin)])
            snap.appendItems([i], toSection: snap.sectionIdentifiers.last!)
        }
    }
                    
    self.data.apply(snap)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM