0

フレーム サイズ 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 は最初の行だけでなく、各行のセルを誤って配置します。

4

1 に答える 1

0

問題が解決しました。セル内のラベルの四角形を間違えました。各セルに 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}]; その後、すべてが正しく機能します。とにかくありがとう

于 2012-11-14T02:47:52.220 に答える