【问题标题】:How can I get the UITableView scroll position so I can save it?如何获取 UITableView 滚动位置以便保存?
【发布时间】:2011-02-17 06:18:18
【问题描述】:

有什么方法可以找出滚动窗口顶部的UITableViewCell 吗?

我想获取当前滚动位置,以便在应用退出时保存它。当应用程序启动时,我想滚动到它上次退出时的位置。

【问题讨论】:

    标签: iphone objective-c uitableview uiscrollview


    【解决方案1】:

    您可以通过查看其contentOffset 属性轻松获取表格视图的确切偏移量。对于垂直滚动,请看:

    tableView.contentOffset.y;
    

    【讨论】:

    • 这是滚动视图中的一个CGPoint,我不知道我怎么知道对应的是哪个UITableViewCell。
    • 如果使用偏移量就不需要单元格;重新进入视图时只需设置偏移量。但是,如果您必须知道顶部的单元格,只需使用:[tableView indexPathForRowAtPoint: CGPointMake(0, 0)];
    • 使用 contentOffset 效果很好,它会返回应用程序上次退出时的滚动位置。谢谢!毕竟我不需要知道它是哪个单元格。
    • 对于c#用户使用这种情况:tableView.ContentOffset.Y;
    【解决方案2】:

    仅当您知道所有表格视图项的大小时,可接受的解决方案才有效。自动调整大小/估计大小并不总是正确的。

    另一种方法是保存第一个可见项目并滚动到它。

    您可以通过以下方式获取第一个可见项 indexPath:

    savedIndex = tableView.indexPathsForVisibleRows?.first
    

    然后通过执行以下操作滚动到它:

    tableView.scrollToRowAtIndexPath(savedIndex, atScrollPosition: .Top, animated: false)
    

    【讨论】:

      【解决方案3】:

      确保您可以在 viewWillAppear 而不是 viewDidLoad 中加载(测试 iOS 9)。 ViewWillAppear 是视图完成布局时 - 结果存在差异。

      -(void) viewWillAppear:(BOOL)animated {
          NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults];
          [self.tableView setContentOffset:CGPointMake(0, [lightData floatForKey:@"yValue"])];
      }
      
      -(void) viewWillDisappear:(BOOL)animated {
          NSUserDefaults *lightData = [NSUserDefaults standardUserDefaults];
          [lightData setFloat:self.tableView.contentOffset.y forKey:@"yValue"];
          [lightData synchronize];
      }
      

      【讨论】:

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