UICollectionView estimatedItemSize - 最后一个单元格未对齐
Posted
技术标签:
【中文标题】UICollectionView estimatedItemSize - 最后一个单元格未对齐【英文标题】:UICollectionView estimatedItemSize - last cell is not aligned 【发布时间】:2014-10-25 20:26:33 【问题描述】:我想在单元格中制作一个通常的水平滚动 flowLayout UICollectionView,其中包含估计的ItemSize 和 PreferredLayoutAttributesFittingAttributes。但是最后一个单元格有问题。知道问题出在哪里吗? Project itself
@implementation RowCollectionView
- (instancetype) initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout
if (self = [super initWithFrame:frame collectionViewLayout:layout])
[self configureRowCollectionView];
return self;
- (void) awakeFromNib
[super awakeFromNib];
[self configureRowCollectionView];
- (void) configureRowCollectionView
self.backgroundColor = [UIColor lightGrayColor];
self.dataSource = self;
self.delegate = self;
// Horizontal Direction
UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout *) self.collectionViewLayout;
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
// Estimated Item Size
flowLayout.estimatedItemSize = CGSizeMake(self.bounds.size.height, self.bounds.size.height);
[self registerClass:[RowCollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class])];
- (NSInteger) collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return 10;
- (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([RowCollectionViewCell class]) forIndexPath:indexPath];
cell.contentView.backgroundColor = [UIColor redColor];
return cell;
@end
@implementation RowCollectionViewCell
- (UICollectionViewLayoutAttributes *) preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
UICollectionViewLayoutAttributes *attributes = [layoutAttributes copy];
attributes.size = CGSizeMake(80, 80);
return attributes;
@end
【问题讨论】:
绝对令人困惑为什么会这样:S 有这方面的消息吗? 我遇到了同样的问题...解决了吗? 有任何解决方案吗? 我在您提供的链接上找不到您的演示?请再分享一次 【参考方案1】:我遇到了类似的问题,通过使用 UICollectionViewDelegateFlowLayout 的委托方法 - minimumInteritemSpacingForSectionAt- 给出适当的最小项目间距来解决问题。
【讨论】:
@artyx 如果这对您有帮助,请标记我的回答正确【参考方案2】:您正在视图本身的初始化中设置estimatedItemSize。
你需要在一些控制器中设置它。
还有,
如果所有单元格的高度相同,请使用 itemSize 属性而不是此属性来指定单元格大小。
文档:estimatedItemSize
【讨论】:
Apple 开发人员支持将我的问题确定为错误。 有关于这个问题的消息吗? 有关于这个错误的消息吗? xD【参考方案3】:有一个简单的方法可以解决这个问题。您可以添加原型单元的数量以检查所需位置的单元。在最后一个单元格中找到问题后。检查 Inspector 窗口中的单元格插图。
【讨论】:
【参考方案4】:你调用了 super 方法,但是你没有使用 super 返回的 layoutAttributes。
[super preferredLayoutAttributesFittingAttributes:layoutAttributes];
你可以尝试打印出原始的layoutAttributes vs super的layoutAttributes。 有时候,你不需要调用超级函数。
其次,您可以创建自定义 flowlayout 或设置 inset 让您的单元格对齐顶部。我在我的项目中这样做了。
【讨论】:
【参考方案5】:您可以将其视为建议。据我所知,UICollectionView
的高度超过了UICollectionViewCell
高度,这就是它发生的原因。请让他们平等
【讨论】:
【参考方案6】:自定义单元格大小必须与集合视图单元格的大小相同,请检查。它可能会为您解决问题。
【讨论】:
【参考方案7】:我做过类似的小项目(一个原始(1*N)水平集合视图),这里是github。希望对您的需求有所帮助。
https://github.com/texas16/HorizontalCollectionView
【讨论】:
【参考方案8】:有同样的问题,在我的情况下解决它的方法是确保:
所有单元格高度相等。
collectionView 高度大于单元格高度 + 单元格之间的空间。
【讨论】:
以上是关于UICollectionView estimatedItemSize - 最后一个单元格未对齐的主要内容,如果未能解决你的问题,请参考以下文章
使用 tf.keras.estimator.model_to_estimator 将 keras 模型转换为估计器模型后使用 estimator.train() 的问题
修改 tf.estimator.Estimator 如何为 Tensorboard 创建摘要