【问题标题】:iOS TableView with paging?带有分页的 iOS TableView?
【发布时间】:2014-01-30 04:16:38
【问题描述】:

我正在开发一个带有漂亮 UI 的 iOS 应用程序,用于查看用户的朋友,该应用程序当前处于启用分页和 100×100pt 图片的垂直 ScrollView 中。但是,对于 500 多个朋友来说,这非常低效和缓慢,一次将所有这些图片加载到内存中。我想做的是使用 TableView 并在加载单元格时加载图像,但我真的很喜欢启用分页的 ScrollView 的捕捉效果。

您如何建议我将此功能添加到 TableView?

【问题讨论】:

  • @bhavyakothari,请不要使用code formatting 强调。一般来说,请不要在建议的编辑中添加重点。此外,换行无需使用 HTML。你应该review the formatting guide

标签: ios iphone objective-c uitableview


【解决方案1】:

将 UITableView 的 pagingEnabled 属性设置为 YES 始终是一种选择……但是,默认 UIScrollView 分页将自动以 UITableView 框架高度的倍数进行分页(不太可能与 UITableViewCells 的高度相同),因此您可能需要实现scrollViewWillEndDragging:withVelocity:targetContentOffset. 这个方法在 UIScrollView(或 UITableView)开始减速时调用,它允许我们指定 UIScrollView 应该在哪里结束移动。

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint*)targetContentOffset
{
    //Intercept and recalculate the desired content offset
    CGPoint targetOffset = [self recalculateUsingTargetContentOffset:targetContentOffset];

    //Reset the targetContentOffset with your recalculated value
    targetContentOffset->y = targetOffset.y;
}

您可能需要查看这篇文章 (UITableView w/ paging & momentum),以了解您需要如何调整目标内容偏移重新计算方法以满足您的需求。

【讨论】:

  • 谁能快速翻译一下?
【解决方案2】:

UITableView 继承自 UIScrollView,因此表视图具有 pagingEnabled 属性,就像滚动视图一样。只需将-setPagingEnabled:YES 发送到您的表格视图,就像您使用滚动视图一样。

例如,在UITableViewController 子类实现中:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.pagingEnabled = YES;
}

【讨论】:

    【解决方案3】:

    我不喜欢启用 UITableView 的分页时的滚动,因此我编写了这两个 TouchUpInside 方法(在 C# 中用于 Xamarin)并禁用了表格视图上的分页。我添加了用户可以点击以转到下一页或上一页的按钮。向下翻页时,找到的下一项将滚动到表格视图框架的顶部。向上翻页时,算法会向找到的项目添加一行,以尝试显示未跨越表格视图框架的项目。不会对可能大于表格视图边界的非常高的单元格进行检查。

    partial void buttonNextPageClick( NSObject sender )
    {
      NSIndexPath path;
      CGPoint scrollpoint;
    
      scrollpoint = new CGPoint( 5f, tableviewFOO.ContentOffset.Y + tableviewFOO.Bounds.Height );  // down a page
    
      path = tableviewFOO.IndexPathForRowAtPoint( scrollpoint );
      if ( path == null )
        path = NSIndexPath.FromRowSection( tableviewFOO.NumberOfRowsInSection( 0 ) - 1, 0 );
    
      if ( path != null )
        tableviewFOO.ScrollToRow( path, UITableViewScrollPosition.Top, true );
    }
    
    partial void buttonPreviousPageClick( NSObject sender )
    {
      NSIndexPath path;
      CGPoint scrollpoint;
    
      scrollpoint = new CGPoint( 5f, tableviewFOO.ContentOffset.Y - tableviewFOO.Bounds.Height );  // up a page
    
      path = tableviewFOO.IndexPathForRowAtPoint( scrollpoint );
      if ( path == null )
        path = NSIndexPath.FromRowSection( 0, 0 );
      else
        path = NSIndexPath.FromRowSection( path.Row + 1, 0 );  // +1 for the cell that might be completely visible
    
      if ( path != null )
        tableviewFOO.ScrollToRow( path, UITableViewScrollPosition.Top, true );
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多