フレーム サイズ 320x600、各アイテム サイズ 44x44 の UICollectionView を追加しました。最終的な出力では、すべての行にセルが正しく配置されません。コレクション ビューの境界外に配置されているセルがいくつかあります。このリンクの画像のようになります: http://cl.ly/image/2s270g1p1g2e
#4、#5、#6、#11、#12、#13 などはコレクション ビューの範囲外です。そして、これが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 は最初の行だけでなく、各行のセルを誤って配置します。