gpt4 book ai didi

ios - UICollectionViewFlowLayout - 为某些项目强制换行

转载 作者:行者123 更新时间:2023-12-01 16:09:19 30 4
gpt4 key购买 nike

我有一个带有流布局的垂直滚动 Collection View 。我已经对布局对象进行了子类化,以便将元素在每一行的左侧对齐(使用从这里和那里借来的代码),并将节标题放在每个节的左边距(插图)上(而不是上面),但是否则它只是一个流布局。

我想强制 的单元格一些项目(不是全部)被放置在“下一行”,即使有空间将它们放置在先前放置的单元格的右侧。

我唯一能看到自己这样做的地方是在覆盖 UICollectionViewFlowLayout 时。方法layoutAttributesForItemAtIndexPath(_:) .

但是,只有委托(delegate)/数据源知道哪些项目需要换行,UICollectionViewDelegate 中的任何方法都不知道。 , UICollectionViewDataSourceUICollectionViewDelegateFlowLayout似乎给了我一个机会来说明这一点。

实现这一目标的优雅方式是什么?

最佳答案

你是对的,UICollectionViewFlowLayout用于在您的 collectionView 中定位项目。

您可以同时使用 layoutAttributesForItemAtIndexPathlayoutAttributesForElementsInRect结合设置项目位置,如下所述:https://stackoverflow.com/a/25566843/4320246

在您的情况下,您有几种解决方案来确定您的 collectionView 中每个项目的位置:

  • 在你的 UICollectionViewFlowLayout 的子类中的 collectionView 中定义每个项目和补充 View 的绝对位置
  • 让您的 UICollectionViewFlowLayout 的子类决定项目是否需要换行并更改其UICollectionViewLayoutAttributes
  • 创建一个新的协议(protocol)子类 UICollectionViewDelegateFlowLayout并添加一个类似 - (BOOL)shouldItemBePlacedOnTheNextLineAtIndexPath: 的方法并在 UICollectionViewFlowLayout 的子类中调用此方法像这样 :
    BOOL shouldPlaceOnNextLine = NO;
    id < MySubProtocolOfUICollectionViewDelegate > flowLayoutDelegate = (id < MySubProtocolOfUICollectionViewDelegate >)self.collectionView.delegate;
    if ([flowLayoutDelegate respondsToSelector:@selector(shouldItemBePlacedOnTheNextLineAtIndexPath:)]) {
    shouldPlaceOnNextLine = [flowLayoutDelegate shouldItemBePlacedOnTheNextLineAtIndexPath:indexPath]
    }

  • 但是,我建议您采用第一种解决方案:让 UICollectionViewFlowLayout 的子类确定项目和补充 View 的位置,并在您的 dataSource/delegate 调用 [(MyCustomFlowLayout *)self.collectionView.collectionViewLayout isItemForceOnNewLine]如果你需要它。

    在我看来,这是最优雅的解决方案,因为如果您想动态更改 collectionView 的外观,您仍然可以从一种自定义布局切换到另一种。

    关于ios - UICollectionViewFlowLayout - 为某些项目强制换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083094/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com