当用户滚动时,我的TableView会延迟加载单元格。
我发现了类似的问题,但是这些问题中的人使用图像或下载内容,或者有100多个单元格。
在我的情况下,我有四种不同的一个tableview中的单元格类型(有问题吗?),其中一个在加载新的单元格之前有各种计数和延迟。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
UITableViewCell *tvCell = [tableView dequeueReusableCellWithIdentifier:identifierUpper];
if (!tvCell) tvCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifierUpper];
tvCell.selectionStyle = UITableViewCellSelectionStyleNone;
_collectionMainInfoView.$width = self.view.$width;
_collectionMainInfoView.$height = self.view.$height*0.45;
[tvCell.contentView addSubview:_collectionMainInfoView];
[tvCell.contentView setBackgroundColor:[UIColor clearColor]];
[tvCell setBackgroundColor:[UIColor clearColor]];
return tvCell;
}
if (indexPath.row == 0) {
EventsCell *eventCell = [tableView dequeueReusableCellWithIdentifier:identifierEvent];
[eventCell setEvent:[Event getNextEvent]];
return eventCell;
}
if (indexPath.row == soldiers.count + 1) {
InviteOtherCell *cellInvite = [tableView dequeueReusableCellWithIdentifier:identifierInvite];
return cellInvite;
}
else {
ProfilesCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
cell.curSoldier = _curSoldier;
cell.delegate = self;
// [cell configureCellWithSoldier:soldiers[indexPath.row - 1]];
[cell setRightUtilityButtons:[self rightButtons] WithButtonWidth:120];
return cell;
}
}
最后一个(在"之后{")在显示之前有延迟
#ProfilesCell.m
- (void)awakeFromNib {
[super awakeFromNib];
_cardView.layer.shadowColor = [UIColor blackColor].CGColor;
_cardView.layer.shadowOffset = CGSizeMake(1,1);
_cardView.layer.shadowRadius = 2;
_cardView.layer.shadowOpacity = 0.2;
}
答案 0 :(得分:0)
这段代码对我来说有点乱。
1)您已经定义了一些视图_collectionMainInfoView
,它将被添加到第一部分中每个出列的单元格中,因此您不仅会保留该视图,还会在每次此委托时将其读取到表格视图单元格中方法被调用。
我建议只创建自己的包含主要信息视图的单元格子类。
之后,您将能够为您的表视图注册此UITableViewCell的子类,因此您将摆脱此代码
if (!tvCell) tvCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifierUpper];
_collectionMainInfoView
。闻起来。当您在第一部分中有多个单元格时,如何重用此视图?你最终可能会在几个单元格中引用“跳跃视图”。 2)我们没有看到您ProfilesCell
的实施,因此很难说出现了什么可能出错。如果可能,尝试直接在其init中设置单元格的视图层次结构。如果那是不可能的。每次调用此委托方法时都不要生成按钮[self rightButtons]
。
您也没有遵循Objective-C代码指南。试着通过他们。
例如在这里:
[cell setRightUtilityButtons:[self rightButtons] WithButtonWidth:120];
您的方法参数应以小写
开头 [cell setRightUtilityButtons:[self rightButtons] withButtonWidth:120];
3)为了更好的可读性,我在控制流中使用switch而不是if语句
答案 1 :(得分:0)
UITableView滚动不平滑的唯一原因是您在加载Cell时在主线程中执行long async。试着找出哪些代码可以在异步中长期执行?
尝试评论你的2行(仅供测试)。你在那2 set
函数中做了什么?
cell.curSoldier = _curSoldier;
和
[eventCell setEvent:[Event getNextEvent]];
答案 2 :(得分:0)
滚动不平滑时,通常在显示单元格时执行异步工作。根据你的代码,我怀疑有2行:
1。 cell.delegate = self; 不确定你想在这做什么。它可能会在引用中引起循环?
2。 有时,编译器中的新优化规则会出现命令中的命令问题。就像在你的陈述中一样:
[cell setRightUtilityButtons:[self rightButtons] WithButtonWidth:120];
您可以尝试在2个单独的语句和新变量中解决此问题。
答案 3 :(得分:0)
与您的tableview代码无关,但创建阴影会导致性能下降,尤其是在创建很多时。我建议使用shadowPath
属性,它会大大加快您的代码速度。