Building UICollectionViewLayout-自定义单个项目的大小

问题描述 投票:0回答:1

以下是为使sectionIndex中的一个UICollectionViewLayout具有与其他部分相比该部分中每个项目的宽度/高度不同而起作用的代码。我的问题是如何进一步更改此部分中第一项的宽度:

myCollectionView = UICollectionView(frame: myFrame, collectionViewLayout: generateLayout())

func generateLayout() -> UICollectionViewLayout {

    let layout = UICollectionViewCompositionalLayout { (sectionIndex: Int,
         layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in

     return self.generateStoryLayout(forSection: sectionIndex)
    }
    return layout
}

func generateStoryLayout(forSection: Int) -> NSCollectionLayoutSection {
    let itemSize = NSCollectionLayoutSize(
        widthDimension: .fractionalWidth(1.0),
        heightDimension: .fractionalWidth(1.0))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    print("generate story layout for this section")

    var groupSize = NSCollectionLayoutSize(
        widthDimension: .absolute(180),
        heightDimension: .absolute(216))

    //taller row in section 1
    if forSection == 1 {
        groupSize = NSCollectionLayoutSize(
             widthDimension: .absolute(250),
             heightDimension: .absolute(300))
    }

    let group = NSCollectionLayoutGroup.vertical(layoutSize: groupSize, subitem: item, count: 1)

    let section = NSCollectionLayoutSection(group: group)
    section.orthogonalScrollingBehavior = .continuousGroupLeadingBoundary   //.groupPaging

    return section
}

非常感谢您的帮助!

我分别使用一个不同的UICollectionView,它的布局使用UICollectionViewFlowLayout,并且为每个项目调用了函数layout:sizeForItemAt:,因为我可以在UICollectionView中确定它们的大小。

自定义myCollectionView不会调用此layout:sizeForItemAt:

ViewController确实符合UICollectionViewDelegate

ios swift uicollectionview uicollectionviewcell uicollectionviewlayout
1个回答
0
投票

您是否设置了估计尺寸是没有?

如果

估计尺寸是自动的,则不会调用layout:sizeForItemAt:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.