在表格视图中,我必须滚动到顶部。但我不能保证第一个对象是section 0,第0行。可能我的表视图将从第5节开始。

所以当我调用:

[mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO];

有其他方法滚动到表视图的顶部吗?


当前回答

对于具有contentInset的表,将内容偏移量设置为CGPointZero将不起作用。它会滚动到内容顶部,而不是滚动到桌面顶部。

将内容嵌入考虑在内会产生这样的结果:

[tableView setContentOffset:CGPointMake(0, -tableView.contentInset.top) animated:NO];

其他回答

如果你想在表格中移动滚动动画,请使用此代码。滚动移动到顶部的动画在0.5秒。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

[_tableContent scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];

[UIView commitAnimations];

在Swift-3中:

self.tableView.setContentOffset(CGPoint.zero, animated: true)

斯威夫特3

tableView.setContentOffset(CGPoint.zero, animated: true)

如果视图。setcontenttoffset不起作用。

使用:

tableView.beginUpdates()
tableView.setContentOffset(CGPoint.zero, animated: true)
tableView.endUpdates()

注意:此答案不适用于iOS 11及更高版本。

我更喜欢

[mainTableView setContentOffset:CGPointZero animated:YES];

如果你在你的表格视图中有一个top inset,你必须减去它:

[mainTableView setContentOffset:CGPointMake(0.0f, -mainTableView.contentInset.top) animated:YES];

要在完成时有一个完成,请添加此扩展

// MARK: - UIScrollView

extension UIScrollView {

    /// Animate scroll to top with completion
    ///
    /// - Parameters:
    ///   - duration:   TimeInterval
    ///   - completion: Completion block
    func animateScrollToTop(withDuration duration:  TimeInterval,
                            completion:             @escaping (()->())) {

        UIView.animate(withDuration: duration, animations: { [weak self] in
                self?.setContentOffset(CGPoint.zero, animated: false)
            }, completion: { finish in
                guard finish else {
                    return
                }
                completion()
        })
    }
}

tableView.animateScrollToTop(withDuration: 0.25) { 
    // Finish
}