• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UICollectionViewCell 位置翻倍

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:40:26 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我刚刚注意到 uicollectionviewcells 的中心是真实中心的一半。

示例:

将单元格的框架设置为:

[0] {{0, 0}, {100, 100}}
[1] {{100, 100}, {100, 100}}
[2] {{200, 200}, {100, 100}}
[3] {{300, 300}, {100, 100}}
[4] {{400, 400}, {100, 100}}
[5] {{500, 500}, {100, 100}}

注意:这是我从 setFrame 得到的值,applyLayoutAttributes:

看起来像这样: actual look

但应该是这样的: how it should look

UICollectionViewLayout子类的实现

@implementation CVTLayout

- (void)prepareLayout {
    [super prepareLayout];

    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;


    CGSize size = CGSizeMake(100, 100);
    CGPoint center = CGPointMake(50, 50);
    NSMutableArray *cellAttributes = [[NSMutableArray alloc] init];
    for (int item = 0; item < [cvt.cellValues count]; item++) {
        NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:0];
        UICollectionViewLayoutAttributes *attributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
        attributes.size = size;
        attributes.center = center;
        [cellAttributes addObject:attributes];

        center.x += size.width;
        center.y += size.height;
    }
    cvt.cellAttributes = cellAttributes;
}

- (CGSize)collectionViewContentSize {
    return self.collectionView.bounds.size;
}

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPathNSIndexPath *)indexPath {
    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;
    return cvt.cellAttributes[indexPath.item];
}

- (NSArray *)layoutAttributesForElementsInRectCGRect)rect {
    NSMutableArray *layoutAttributes = [[NSMutableArray alloc] init];
    CollectionViewTable *cvt = (CollectionViewTable*)self.collectionView;
    for (UICollectionViewLayoutAttributes *cellAttributes in cvt.cellAttributes) {
        if (CGRectIntersectsRect(rect, cellAttributes.frame)) {
            [layoutAttributes addObject:cellAttributes];
        }
    }
    return layoutAttributes;
}

- (BOOL)shouldInvalidateLayoutForBoundsChangeCGRect)newBounds {
    return false;
}

@end



Best Answer-推荐答案


问题是将 cell-label-frame 设置为 cell-frame 而不是 cell-bounds...

关于ios - UICollectionViewCell 位置翻倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16961009/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap