在iOS 8中停止UITableView自动滚动

时间:2014-09-25 11:45:02

标签: ios iphone uitableview ios8

当我使用[self.navigationController pushViewController:newViewController animated:YES]; 自动滚动仅自动滚动 iOS 8 >

详细问题:

现在,我将详细说明我是如何解决问题的,尤其是在iOS 8中。选择任何有大约50个条目的桌面视图,向下滚动以获得第10个条目在tableview顶部输入。然后选择tableview上的任何项目。使用以下方法在tableview中按行选择推送视图控制器。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    // Open the New View
    NewViewController *newVC = [[NewViewController alloc] init];
    [self.navigationController pushViewController:newVC animated:YES];
}

现在你会发现从NewViewController回到之前的ViewController后,tableview会自动滚动一段距离。 tableview不会停留在滚动位置,它会自动改变其位置。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我正在使用新的iOS 8功能动态单元格高度。我在设置:

self.tableView.estimatedRowHeight = 50.0;
self.tableView.rowHeight = UITableViewAutomaticDimension;

问题是某些单元格远高于50.解决方案是提供委托方法estimatedHeightForRowAtIndexPath并返回更接近实际单元格高度的值。例如:

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {

    if (indexPath.row == 1) {
        return 300.0;
    }

    return 50;
}

另一个解决方案是使用systemLayoutSizeFittingSize内的cellForRowAtIndexPath计算单元格高度并缓存该值。内部estimatedHeightForRowAtIndexPath提供缓存值,但如果尚未缓存单元格高度,则返回默认值。

答案 1 :(得分:0)

只需删除self.tableView.estimatedRowHeight = xxx;它对我有用。问题发生在iOS8中,不会出现在iOS10中