Ios UICollectionViewCompositionLayout应用程序启动时估计的宽度问题
我的布局类似于iOS上的应用商店。我正在使用Ios UICollectionViewCompositionLayout应用程序启动时估计的宽度问题,ios,swift,uicollectionviewlayout,uicollectionviewcompositionallayout,Ios,Swift,Uicollectionviewlayout,Uicollectionviewcompositionallayout,我的布局类似于iOS上的应用商店。我正在使用UICollectionViewCompositionalLayout来布局这些项目。当应用程序加载时,前两部分的起始位置有一些不规则。我已将其缩小到布局组大小内的.estimated(view.frame.width-26)。(因为最后一节只有.fractilwidth)并按预期工作 但是,当您与该部分交互时,将显示预期的行为。我已经附加了一个gif作为参考,也是一个预期的vs输出图像 相互作用 期望与产出 以下是我对每个部分的代码: filep
UICollectionViewCompositionalLayout
来布局这些项目。当应用程序加载时,前两部分的起始位置有一些不规则。我已将其缩小到布局组大小内的.estimated(view.frame.width-26)
。(因为最后一节只有.fractilwidth
)并按预期工作
但是,当您与该部分交互时,将显示预期的行为。我已经附加了一个gif作为参考,也是一个预期的vs输出图像
相互作用
期望与产出
以下是我对每个部分的代码:
fileprivate func createLargeLayout(for section: Section) -> NSCollectionLayoutSection {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))
let layoutItem = NSCollectionLayoutItem(layoutSize: itemSize)
layoutItem.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 5, bottom: 0, trailing: 5)
let layoutGroupSize = NSCollectionLayoutSize(widthDimension: .estimated(view.frame.width - 26), heightDimension: .estimated(250))
let layoutGroup = NSCollectionLayoutGroup.horizontal(layoutSize: layoutGroupSize, subitems: [layoutItem])
let layoutSection = NSCollectionLayoutSection(group: layoutGroup)
layoutSection.orthogonalScrollingBehavior = .groupPagingCentered
return layoutSection
}
fileprivate func createMediumLayout(for section: Section) -> NSCollectionLayoutSection {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.5), heightDimension: .fractionalHeight(1))
let layoutItem = NSCollectionLayoutItem(layoutSize: itemSize)
layoutItem.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 5, bottom: 0, trailing: 5)
let layoutGroupSize = NSCollectionLayoutSize(widthDimension: .estimated(view.frame.width - 26), heightDimension: .estimated(view.frame.width / 2 - 26))
let layoutGroup = NSCollectionLayoutGroup.horizontal(layoutSize: layoutGroupSize, subitems: [layoutItem])
let layoutSection = NSCollectionLayoutSection(group: layoutGroup)
layoutSection.orthogonalScrollingBehavior = .groupPagingCentered
return layoutSection
}
fileprivate func createSmallLayout(for section: Section) -> NSCollectionLayoutSection {
let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))
let layoutItem = NSCollectionLayoutItem(layoutSize: itemSize)
layoutItem.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 18, bottom: 1, trailing: 18)
let layoutGroupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .estimated(50))
let layoutGroup = NSCollectionLayoutGroup.vertical(layoutSize: layoutGroupSize, subitems: [layoutItem])
let layoutSection = NSCollectionLayoutSection(group: layoutGroup)
return layoutSection
}
}
更新
我认为这是我的内容插页的问题,因为内容插页只有在计算了项目大小之后才会被调用。我相信我需要实施
// item spacing
group.interItemSpacing = .fixed(15)
// group spacing
section.interGroupSpacing = 15