iOS 8自动单元格高度 - didSelectRowAtIndexPath导致UItableview跳转到顶部

时间:2014-10-27 23:16:02

标签: ios objective-c uitableview ios8

我目前正在将应用更新到iOS8,并且正在替换我自己的单元格高度计算。我有一堆自定义单元格的tableview。选择后的每个单元格都会将新视图显示/推送到navigationController。当使用这些单元格填充tableview,并且用户选择靠近表格底部的表格视图时,tableview会在显示新视图之前跳转到右上角。这对用户来说非常分散注意力。我正在尝试使用iOS 8中引入的自定义单元格(在viewDidLoad中):

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

以下是选择单元格时的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UIViewController *selectedViewController = [[UIStoryboard storyboardWithName:@"Trip" bundle:nil] instantiateViewControllerWithIdentifier:@"TripDetail"];
    DetailViewController *destViewController = (id)selectedViewController;
    [destViewController setData:self.dataStore];

    [self.navigationController pushViewController:selectedViewController animated:YES];
}

有谁知道为什么会这样?我怎么能让它停下来?

2 个答案:

答案 0 :(得分:5)

这是一个已知问题。 tableView调用其委托来获取行的估计高度,这导致表滚动。

您可以等到下次更新是否已修复,或实施tableView:estimatedHeightForRowAtIndexPath:(暂时解决方法)并返回缓存高度。由于估计将是实际高度,因此表格不会跳跃。

答案 1 :(得分:1)

当表委托被点击“didSelectRowAtIndexPath:”时会发生这种情况 因为委托方法“numbersOfSectionsInTableView”&& “numbersOfRowsInSection”将被调用。就像重新加载桌子一样。

您可以使用此方法修复跳跃状态“heightForRowAtIndexPath:”但是您必须忽略自动调整大小。