iOS6 - UICollectionViewFlowLayout 没有正确放置单元格
Posted
技术标签:
【中文标题】iOS6 - UICollectionViewFlowLayout 没有正确放置单元格【英文标题】:iOS6 - UICollectionViewFlowLayout doesn't place the cell correctly 【发布时间】:2012-11-12 15:53:31 【问题描述】:我添加了一个框架大小为 320x600 的 UICollectionView,每个项目大小为 44x44。最终输出没有正确定位每一行中的单元格。有一些单元格位于集合视图的边界之外,它看起来像这个链接中的图像:http://cl.ly/image/2s270g1p1g2e
#4、#5、#6、#11、#12、#13 和 else 超出集合视图的范围。这是我启动 UICollectionView 和流布局的代码:
SSCalendarFlowLaout *flowlayout = [[SSCalendarFlowLaout alloc] init];
flowlayout.minimumInteritemSpacing = 1.0f;
flowlayout.minimumLineSpacing = 1.0f;
flowlayout.itemSize = CGSizeMake(44, 44);
flowlayout.scrollDirection = UICollectionViewScrollDirectionVertical;
CGRect rect = CGRectMake(0, 0, 320, 600);
self.calendarGrids = [[UICollectionView alloc] initWithFrame:rect
collectionViewLayout:flowlayout];
self.calendarGrids.delegate = self;
self.calendarGrids.dataSource = self;
self.calendarGrids.allowsSelection = YES;
self.calendarGrids.backgroundColor = [UIColor yellowColor];
[self.calendarGrids registerClass:[SSCalendarDayCell class]
forCellWithReuseIdentifier:@"CalendarDayCell"];
[self addSubview:self.calendarGrids];
SSCalendarFlowLayout 是 UICollectionViewFlowLayout 的子类。子类化它的原因是为了调试这个问题:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
NSArray *unfilteredPoses = [super layoutAttributesForElementsInRect:rect];
for (UICollectionViewLayoutAttributes *pose in unfilteredPoses)
NSLog(@"%@", NSStringFromCGRect(pose.frame));
return unfilteredPoses;
有趣的是,每个项目的 layoutAttributesForElementsInRect 输出都是正确的,如下面的控制台输出:
2012-11-12 23:42:59.275 Calendar[49367:c07] 0, 22, 44, 44
2012-11-12 23:42:59.275 Calendar[49367:c07] 55.2, 22, 44, 44
2012-11-12 23:42:59.276 Calendar[49367:c07] 110.4, 22, 44, 44
2012-11-12 23:42:59.278 Calendar[49367:c07] 165.6, 22, 44, 44
2012-11-12 23:42:59.278 Calendar[49367:c07] 220.8, 22, 44, 44
2012-11-12 23:42:59.279 Calendar[49367:c07] 276, 22, 44, 44
2012-11-12 23:42:59.279 Calendar[49367:c07] 0, 76, 44, 44
但为什么输出与 UICollectionViewFlowLayout 设置的框架如此不同?模拟器和 iPhone 中的输出都是错误的。
我怀疑这是一个与此相关的错误:http://openradar.appspot.com/12433891 但与此错误不同的是,UICollectionViewFlowLayout 在每一行中都错放了单元格,而不仅仅是第一行。
【问题讨论】:
【参考方案1】:问题解决了。我错过了单元格内的标签矩形。我在每个单元格中添加了一个 UILabel 的子视图,但是在这个问题中发生的事情是我将标签配置如下:
- (id) initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
self.dayLabel = [[UILabel alloc] initWithFrame:frame];
[self.contentView addSubview:self.dayLabel];
return self;
这绝对是错误的。我将框架集更正为: self.dayLabel = [[UILabel alloc] initWithFrame:(CGRect)CGPointZero, frame.size]; 然后一切正常。 还是谢谢
【讨论】:
以上是关于iOS6 - UICollectionViewFlowLayout 没有正确放置单元格的主要内容,如果未能解决你的问题,请参考以下文章