gpt4 book ai didi

ios - UITableView 在开始/结束更新调用调整高度后自动滚动到顶部

转载 作者:可可西里 更新时间:2023-11-01 05:41:00 24 4
gpt4 key购买 nike

我有一个初始化单元格的 TableViewController:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
FIDPostTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell for this indexPath
[cell updateFonts];
[cell loadDataWithPost:[self.posts objectAtIndex:indexPath.item]];
cell.parentTableViewController = self;
cell.indexPath = indexPath;
[cell draw];
if(self.selectedIndex == indexPath.row){
//Do expand cell stuff
} else{
//DO closed cell stuff
}

return cell;
}

并响应 heightForRowAtIndexPath:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *reuseIdentifier = CellIdentifier;
FIDPostTableViewCell *cell = [self.offscreenCells objectForKey:reuseIdentifier];
if (!cell) {
cell = [[FIDPostTableViewCell alloc] init];
[self.offscreenCells setObject:cell forKey:reuseIdentifier];
}

// Configure the cell for this indexPath
[cell updateFonts];
[cell loadDataForHeightCalculationWithPost:[self.posts objectAtIndex:indexPath.item]];
[cell draw];

if(self.selectedIndex == indexPath.row){
return [cell calculateHeight] + 100;
} else{
return [cell calculateHeight];
}


}

self.selectedIndex是TableViewController的一个int局部变量

每个自定义单元格都有一个按钮,触摸时响应选择器,这是我的 CustomViewCell 代码:

  self.expandSocialAction = [UIButton buttonWithType:UIButtonTypeRoundedRect];
self.expandSocialAction.backgroundColor = [FIDUIHelper fideniaLightBlue];
[self.expandSocialAction addTarget:self action:@selector(selectRow:) forControlEvents:UIControlEventTouchUpInside];
[self.contentView addSubview:self.expandSocialAction];

然后:

-(void)selectRow:(id)sender{
if(self.parentTableViewController.selectedIndex == self.indexPath.row){
self.parentTableViewController.selectedIndex = -1;
} else{
self.parentTableViewController.selectedIndex = self.indexPath.row;
}
[self.parentTableViewController.tableView beginUpdates];
[self.parentTableViewController.tableView endUpdates];

}

单元格有一个指向父 tableViewContorller 的指针:self.parentTableViewController。一切正常,在 beginUpdate 和 endUpdates 调用之后,方法 heightForRowAtIndexPath 被调用(我在其中放置了一个断点)并且单元格也具有正确的高度。

如果我单击第一行或第二行上的按钮,单元格会设置动画并很好地更改高度,但是如果我向下滚动表格,例如我单击第 6 行,高度会发生变化,但 tableView 会自动滚动到第一行或第二个元素。

有什么建议吗?

问候,

最佳答案

我感觉 heightForRowAtIndexPath: 方法是问题的一部分。不要执行计算,而是尝试在该方法中只使用两个常量:一个用于展开,一个用于折叠。我想知道是否该方法执行时间太长,然后认为行的高度为 0,然后计算最终返回,但是 UITableView 滚动位置为未更新。

另一个建议可能是您的 estimatedHeightheightFor 方法返回两个截然不同的值。

关于ios - UITableView 在开始/结束更新调用调整高度后自动滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24940425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com