【问题标题】:How to reset the scroll position of a UITableView?如何重置 UITableView 的滚动位置?
【发布时间】:2008-11-21 04:24:27
【问题描述】:

我想完全重置 UITableView 的滚动位置,以便每次打开它时,它都会显示最顶部的项目。换句话说,我希望每次打开表格视图时都将其滚动到顶部。

我尝试使用以下代码,但看起来我误解了文档:

- (void)viewWillAppear:(BOOL)animated {
    [tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionTop animated:NO];
}

这是错误的方法吗?

【问题讨论】:

    标签: iphone cocoa-touch uitableview scroll


    【解决方案1】:

    August 得到了 UITableView 特有的方法。另一种方法是:

    [tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
    

    该方法定义在 UIScrollView 中,它是 UITableView 的父类。上面的示例告诉它滚动到 0,0 处的 1x1 框 - 换句话说,就是左上角。

    【讨论】:

    • 这实际上是一种非常简洁的方法,因为您无需担心您的桌子是否是空的。当没有要显示的记录时,我在 NSIndexPath (0,0) 处发生了严重的崩溃。
    【解决方案2】:

    您正在使用的方法滚动到(正如方法名称所暗示的)最近的选定行。在许多情况下,这不会是第一行。相反,您想使用任一

    scrollToRowAtIndexPath:atScrollPosition:animated:
    

    selectRowAtIndexPath:animated:scrollPosition:
    

    您使用要滚动到的行的索引路径的位置。第二种方法实际上选择了一行,第一种方法只是滚动到它。

    【讨论】:

    • 这些在动画序列开始时不适用于 iOS 4.0。我不得不使用 scrollRectToVisible:animated:
    【解决方案3】:

    我最终做的是:

    斯威夫特 4

    self.tableView.contentOffset = CGPoint.zero
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
    

    【讨论】:

      【解决方案4】:

      斯威夫特:

      self.tableView.scrollRectToVisible(CGRect.zero, animated: false)
      

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 1970-01-01
        • 2011-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 1970-01-01
        相关资源
        最近更新 更多