iOS: UITableView弹出后滚动回顶部ViewController

iOS: Scroll UITableView back to the top after popping ViewController

在某些情况下,我的 UITableView 需要在弹回 ViewController 后一直滚动到顶部。

下面的代码工作正常(为简单起见,我对其进行了编辑),但我希望找到一种不使用延迟计时器的更好方法。如果我不使用计时器,UITableView 不会一直滚动到顶部,因为 ViewController 尚未加载(我认为)。

DetailController.m

- (void)popToViewController {
    // pop back to ViewController.
    [self.navigationController popViewControllerAnimated:YES];

    // Calls ViewController method
    [self.viewController method];
}

ViewController.m

- (void)method {
   dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
            [self.tableView setContentOffset:CGPointZero animated:NO];
        });
}

我尝试在 ViewController 中使用 ViewDidAppear 并且它有效,但是如果我弹出 ViewController,它会一直被调用。我只需要在某些情况下一直向上滚动 UITableView

编辑:我也试过 dispatch_async,但它并不总是有效。

可以为动画添加完成块。删除你的计时器并尝试这样的事情:

- (void)popToViewController {
    [CATransaction begin];

    [CATransaction setCompletionBlock:^{
        [self.viewController method];
    }];

    [self.navigationController popViewControllerAnimated:YES];

    [CATransaction commit];
}