gpt4 book ai didi

ios - UICollectionViewFlowLayout 没有正确换行

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:08:31 50 4
gpt4 key购买 nike

我对流布局进行了子类化,并将其设置为我的 Collection View 中的 collectionViewLayout

然后我设置布局如下:

- (id) init
{
if(self = [super init])
{
self.minimumInteritemSpacing = 11.0;
self.scrollDirection = UICollectionViewScrollDirectionVertical;
self.itemSize = CGSizeMake(64.0,32.0);
self.minimumLineSpacing = 10.0;
self.sectionInset = UIEdgeInsetsMake(11.0,95.0,11.0,11.0);

return self;
}
return nil;
}

95 + 64 + 11 + 64 + 11 + 64 + 11 = 320 - 我检查过了。 (即 1 个左插图、3 个单元格、2 个空格和 1 个右插图)

我有 1 个部分,72 个项目,以及用于索引路径功能的单元格:

- (UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
CustomCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifierForCustomCell forIndexPath:indexPath];

cell.mainLabel.text = [@(indexPath.item) stringValue];

return cell;
}

输出是这样的:

screenshot

如您所见,每行只有 2 个单元格。此外,它不会显示每 3 个单元格。

我看了一下流式布局的布局函数产生了什么

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {

给... console output

这是 layoutAttributes [NSArray] 中的前 3 个布局属性,如您所见,它决定仅将前 2 个和第 4 个项目视为矩形可见(320 by 568).这一定是 Collection View 布局中的错误,不是吗? collection view 占满屏幕,宽度为 320。因此,由于这是一个换行布局,因此任何项目都不应离开屏幕。

删除边缘插入:

screenshot 2

它按预期工作。但是我想要部分插图,因为我需要添加一些装饰 View ,这些装饰 View 需要在同一个 ScrollView 中,而我需要一个比右插图大得多的左插图。

最佳答案

Apple 的 UICollectionViewFlowLayout 中存在一个错误,其中某些单元格显示在边界之外。这些资源将帮助您修复它(您必须创建 UICollectionViewFlowLayout 的子类并覆盖此方法):

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
NSMutableArray *newAttributes = [NSMutableArray arrayWithCapacity:attributes.count];
for (UICollectionViewLayoutAttributes *attribute in attributes) {
if ((attribute.representedElementCategory != UICollectionElementCategoryCell) || // always include everything that's not a cell
((attribute.frame.origin.x + attribute.frame.size.width <= (self.collectionViewContentSize.width - self.sectionInset.right)) &&
(attribute.frame.origin.y + attribute.frame.size.height <= (self.collectionViewContentSize.height - self.sectionInset.bottom))))
{
[newAttributes addObject:attribute];
}
}
return newAttributes;
}

此修复程序的基础来源:

关于ios - UICollectionViewFlowLayout 没有正确换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981345/

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