Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UICollectionViewCompositionLayout应用程序启动时估计的宽度问题_Ios_Swift_Uicollectionviewlayout_Uicollectionviewcompositionallayout - Fatal编程技术网

Ios UICollectionViewCompositionLayout应用程序启动时估计的宽度问题

Ios UICollectionViewCompositionLayout应用程序启动时估计的宽度问题,ios,swift,uicollectionviewlayout,uicollectionviewcompositionallayout,Ios,Swift,Uicollectionviewlayout,Uicollectionviewcompositionallayout,我的布局类似于iOS上的应用商店。我正在使用UICollectionViewCompositionalLayout来布局这些项目。当应用程序加载时,前两部分的起始位置有一些不规则。我已将其缩小到布局组大小内的.estimated(view.frame.width-26)。(因为最后一节只有.fractilwidth)并按预期工作 但是,当您与该部分交互时,将显示预期的行为。我已经附加了一个gif作为参考,也是一个预期的vs输出图像 相互作用 期望与产出 以下是我对每个部分的代码: filep

我的布局类似于iOS上的应用商店。我正在使用
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