我添加了一个框架大小为 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 在每一行中错放了单元格,而不仅仅是第一行。