ios - 使用滚动的UICollectionViewCell渲染问题

  显示原文与译文双语对照的内容
0 0

我有一个带有可变高度行的UICollectionView 。 对于前四个单元格,它呈现良好的状态,但是当滚动时,新单元格的维度和数据。

单元设置了两个 UIViews -- headerView和 entryView 。 标题视图是基于标志隐藏或者显示的;条目视图可以是A,也可以是B,它们具有不同的高度。

以下是UICollectionView的委托方法:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
 MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MyCell"
 forIndexPath:indexPath];
 Entry *entry = self.entries[indexPath.row];
 [cell setEntry:entry showHeader:showHeader];
 return cell;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
 CGSize size = [self cellHeight:self.entries[indexPath.row]];
 return size;
}

在MyCell笔尖中,我有两个 UIViews,headerViewentryView 。 entryView的内容根据类型进行更改。 同时基于 showHeader 标志,我显示/隐藏标题视图。

[ UIView - header view ]
[ UIView - entry view ]

在MyCell实现中,

@interface ActivityCell ()
@property (weak, nonatomic) IBOutlet UIView *headerView;
@property (weak, nonatomic) IBOutlet UIView *entryView;
@end
- (id)initWithFrame:(CGRect)frame
{
 self = [super initWithFrame:frame];
 if (self) {
 UINib *nib = [UINib nibWithNibName:@"MyCell" bundle:nil];
 NSArray *objects = [nib instantiateWithOwner:self options:nil];
 [self.contentView addSubview:objects[0]];
 }
 return self;
}
- (void)setEntry:(Entry *)entry {
 _entry = entry;
 if (self.entry.entryType == TypeA) {
 EntryAView *entryA = [[EntryAView alloc] init];
 entryA.entry = entry;
 [self.entryView addSubview:entryA];
 } else if (self.entry.entryType == TypeB) {
 EntryBView *entryB = [[EntryBView alloc] init];
 entryB.entry = entry;
 [self.entryView addSubview:entryB];
 }
}
- (void)setEntry:(Entry *)entry showHeader:(BOOL)showHeader {
 if (showHeader) {
 UserHeader *userHeader = [[UserHeader alloc] init];
 userHeader.user = entry.user;
 [self.userView addSubview:userHeader];
 self.userView.hidden = NO;
 self.topConstraint.constant = UserHeaderHeight;
 } else {
 self.userView.hidden = YES;
 self.topConstraint.constant = 0;
 }
 self.entry = entry;
}
- (void)prepareForReuse {
 [super prepareForReuse];
 NSArray *userViewsToRemove = [self.userView subviews];
 for (UIView *subview in userViewsToRemove) {
 [subview removeFromSuperview];
 }
 NSArray *entryViewsToRemove = [self.entryView subviews];
 for (UIView *subview in entryViewsToRemove) {
 [subview removeFromSuperview];
 }
 self.topConstraint.constant = 0;
 self.entry = nil;
}
  • 我正在计算 cellHeight 中单元格的高度,它返回正确的CGSize 。
  • 经过研究,我在单元中添加了 prepareForReuse,这似乎有帮助,但没有完全解决这个问题。
时间:原作者:1个回答

0 0

这可能是一个并发问题。 尝试添加:

[cell setNeedsDisplay];

你的cellForItemAtIndexPath 方法。

原作者:
...