问题描述
这是 iMessage 的图片。您可以看到红色圆圈显示的消息之间的差距比橙色圆圈更大。
假设每个单元格都是聊天气泡之一:在 UIKit
中实现这种可变单元格间距的最佳方法是什么?
我有两个想法:
有人对实现 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)
}
然后,它就像拥有一个函数来决定何时追加到上一节与初始化一个新节一样简单。这是我的一个例子:
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)
}