在 UICollectionViewCell 中分配 UILabel

Allocating UILabel in UICollectionViewCell

我制作的应用具有集合视图和不同的纵向和横向布局,我正在为每个单元格分配 UIlabel。

我就是这样做的。

UILabel *scheduleCellLabel = [[UILabel alloc] init];
scheduleCellLabel.textAlignment = NSTextAlignmentCenter;
scheduleCellLabel.frame = CGRectMake(0, 0,scheduleCell.bounds.size.width, scheduleCell.bounds.size.height);
[scheduleCell addSubview:scheduleCellLabel];

问题是每次方向改变时我都会重新加载集合视图,但旧单元格仍保留在集合视图中。我试图在加载时从单元格中删除标签,但这不是问题所在。

这是它的样子:

提前致谢。

删除并添加 cellForItemAtIndexPath 中的标签。首先检查标签是否在单元格中,如果是,则将其从超级视图中删除,然后创建新标签并将其添加到其内容视图中。

可能,您在 cellForRowAtIndexPath 方法中分配了 uilabel,当您重新加载 collectionView 时,它会一次又一次地出现。 要解决您的问题,只需将您的标签定义为 属性 并在 viewDidLoad 方法中分配它,然后在 cellForRowAtIndexPath 方法中执行您想要的操作。希望这会有所帮助。

例如,这是你的头文件:

@property (retain,nonatomic) IBOutlet UILabel *label;

这是实现文件的viewDidLoad方法:

    _label = [[UILabel alloc] init];

在我看来,除非需要,否则将添加子视图的代码放在 cellForRowAtIndexPath 中不是一个好习惯;例如,如果某些单元格具有子视图,而某些则不基于 indexPath。您应该在 IB 中创建单元格,或者将单元格子类化,并在单元格的 init 方法中添加任何子视图。这样,您不必在重新添加之前删除视图,或者在添加视图之前检查它们是否存在;这只会使您的 cellForRowAtIndexPath 方法复杂化。