【发布时间】:2021-11-23 06:09:38
【问题描述】:
我希望实现下图。本质上,它是 UICompositionalLayout 中的一个水平“部分”,其中单元格大小与文本相符。
我遇到的问题是,如果单元格不适合屏幕,它将偏移到下一个屏幕页面。
这是我的代码:
fileprivate func createNavigationButtonSection(using section: HomeSection) -> NSCollectionLayoutSection {
let estimatedHeight: CGFloat = 40
let estimatedWidth: CGFloat = 100
let itemSize = NSCollectionLayoutSize(widthDimension: .estimated(estimatedWidth),
heightDimension: .estimated(estimatedHeight))
let item = NSCollectionLayoutItem(layoutSize: itemSize)
item.edgeSpacing = NSCollectionLayoutEdgeSpacing(leading: nil,
top: nil,
trailing: .fixed(8),
bottom: nil)
let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1),
heightDimension: .estimated(estimatedHeight))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize,
subitems: [item])
let section = NSCollectionLayoutSection(group: group)
section.orthogonalScrollingBehavior = .continuous
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 16, bottom: 0, trailing: 0)
return section
}
这是它在推动最后一个单元格时产生的效果
更新
fileprivate var navigationButtons: [NavigationButton] = [
NavigationButton(image: UIImage(named: "heart"), title: "Saved", query: "item_saved"),
NavigationButton(image: UIImage(named: "grid"), title: "Categories", query: "item_categories"),
NavigationButton(image: UIImage(named: "deal"), title: "Deals", query: "item_deals"),
NavigationButton(image: UIImage(named: "clock"), title: "Latest", query: "item_latest"),
]
fileprivate var sections = [HomeSection]()
在 ViewDidLoad 中:
sections = [HomeSection(title: nil, subtitle: nil, section_type: "navigationButtons", item: navigationButtons)]
【问题讨论】:
-
您能告诉我们您更新数据源的位置吗?看起来最后一项可能在它自己的部分中。
-
@Owen26 我已经更新了问题。我认为这与组宽度有关。如果我将 let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), 更改为小数宽度为 (2),它会正确间隔,但组末尾的填充是关闭的。
-
在组声明中使用以下内容会发生什么情况:
let group = NSCollectionLayoutGroup.horizontal(layoutSize: itemSize, subitems: [item]) -
@Owen26 这似乎有效,它将所有项目放在一起,我只需要在它们之间放置间距。因为他们都在感人。
-
然后您可以使用
group.interItemSpacing = .fixed(20)来分隔组中的项目。
标签: swift uikit collectionview uicollectionviewcompositionallayout