0

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

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 回答