我在向 UICollectionView 中的各个单元格添加标签时遇到问题。使用下面所示的代码,标签仅添加到集合中的第一个单元格,而不添加到其他单元格。但是,如果我将第三行到最后一行中的 cell.contentView 更改为 collectionView,标签都会添加到正确的位置,这意味着我至少正在处理正确的框架,但我需要将标签添加到细胞本身。
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell* cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CalendarItem"
forIndexPath:indexPath];
UILabel* dayLabel = [[UILabel alloc] initWithFrame:cell.frame];
[dayLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:15]];
[dayLabel setBackgroundColor:[UIColor clearColor]];
[dayLabel setTextAlignment:NSTextAlignmentCenter];
[dayLabel setText:@"!"];
[cell.contentView addSubview:dayLabel];
[cell setBackgroundColor:[UIColor whiteColor]];
return cell;
}
我都是以编程方式完成这一切,所以这是我正在使用的集合的初始化代码:
frame.origin.y = self.view.frame.origin.y + ROW_SIZE;
frame.size.height = self.view.frame.size.height/2 - 2 * ROW_SIZE;
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
CGSize size = CGSizeMake(frame.size.width/7 - 2 * CALENDAR_EDGE_SPACING,
frame.size.height/5 - 2 * CALENDAR_EDGE_SPACING);
[flow setItemSize:size];
[flow setScrollDirection:UICollectionViewScrollDirectionVertical];
calendarView = [[UICollectionView alloc] initWithFrame:frame collectionViewLayout:flow];
[calendarView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CalendarItem"];
最佳答案
您永远不应该引用单元格的框架。 Collection View 会移动它们、删除它们,并且通常会对您不想考虑的单元格执行意想不到的操作。
如果您希望标签占据整个单元格,则需要将标签的框架设置为单元格的 contentView
框架。如果你这样做,一切都应该开始完美运行。
使用collectionView
代替cell.contentView
的原因是,实际上,单元格位于 Collection View 中的某个任意位置,例如(150,第 1024 章因此,当您在原点 (150, 1024) 处向内容 View 添加标签时,它实际上位于您正在查看的 View 下方;但是当您将标签直接添加到 Collection View 时,它与单元格位于相同的位置。
关于ios - UICollectionView 的 cellForItemAtIndexPath 无法识别单个单元格框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557405/