gpt4 book ai didi

ios - UICollectionView flowLayout 没有正确包装单元格

转载 作者:IT王子 更新时间:2023-10-29 07:31:19 27 4
gpt4 key购买 nike

我有一个带有 FLowLayout 的 UICollectionView。大多数时候它会像我预期的那样工作,但时不时会有一个电池不能正确包裹。例如,如果实际上在第二行中尾随,则应该位于第三行的第一个“列”中的单元格,并且它应该在的地方只有一个空白空间(见下图)。您只能看到这个红色单元格的左侧(其余部分被切断),它应该在的地方是空的。

这种情况不会一直发生;它并不总是在同一行。一旦发生,我可以向上滚动然后返回,单元格将自行修复。或者,当我按下单元格(通过插入将我带到下一个 View )然后弹出时,我会看到单元格处于错误的位置,然后它会跳转到正确的位置。

滚动速度似乎更容易重现问题。当我慢慢滚动时,我仍然可以时不时地看到单元格在错误的位置,但它会立即跳到正确的位置。

当我添加部分插图时,问题就开始了。以前,我的单元格几乎与集合边界齐平(很少或没有插图),但我没有注意到这个问题。但这意味着 Collection View 的左右两边是空的。即,无法滚动。此外,滚动条没有向右对齐。

我可以让这个问题在模拟器和 iPad 3 上都发生。

我猜问题是由于左右部分的插入而发生的......但是如果值是错误的,那么我希望行为是一致的。我想知道这是否可能是 Apple 的错误?或者这可能是由于插入物的堆积或类似的原因。

Illustration of problem and settings


跟进:我一直在用this answer Nick 在下面使用了 2 年多现在没有问题(以防人们想知道该答案中是否有任何漏洞 - 我还没有找到任何漏洞)。干得好,尼克。

最佳答案

UICollectionViewFlowLayout 的 layoutAttributesForElementsInRect 实现中存在一个错误,导致它在某些涉及节插入的情况下为单个单元格返回两个属性对象。返回的属性对象之一无效(超出 Collection View 的范围),另一个有效。下面是 UICollectionViewFlowLayout 的子类,它通过排除 Collection View 边界之外的单元格来解决问题。

// NDCollectionViewFlowLayout.h
@interface NDCollectionViewFlowLayout : UICollectionViewFlowLayout
@end

// NDCollectionViewFlowLayout.m
#import "NDCollectionViewFlowLayout.h"
@implementation NDCollectionViewFlowLayout
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
NSMutableArray *newAttributes = [NSMutableArray arrayWithCapacity:attributes.count];
for (UICollectionViewLayoutAttributes *attribute in attributes) {
if ((attribute.frame.origin.x + attribute.frame.size.width <= self.collectionViewContentSize.width) &&
(attribute.frame.origin.y + attribute.frame.size.height <= self.collectionViewContentSize.height)) {
[newAttributes addObject:attribute];
}
}
return newAttributes;
}
@end

参见 this .

其他答案建议从 shouldInvalidateLayoutForBoundsChange 返回 YES,但这会导致不必要的重新计算,甚至不能完全解决问题。

我的解决方案完全解决了这个错误,并且在 Apple 修复根本原因时应该不会造成任何问题。

关于ios - UICollectionView flowLayout 没有正确包装单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12927027/

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