我正在开发一款iOS应用,这款应用有一个漂亮的UI界面,用于查看用户好友,目前使用了垂直的ScrollView,并开启了分页功能以方便展示100x100pt大小的图片。但是,当好友数量超过500时,这种方式效率极低且速度缓慢,因为需要一次性将所有图片加载到内存中。因此,我想使用TableView并在加载单元格时加载图片,但我又非常喜欢拥有分页功能的ScrollView所具有的吸附效果。
你建议如何为TableView添加这个功能呢?
我正在开发一款iOS应用,这款应用有一个漂亮的UI界面,用于查看用户好友,目前使用了垂直的ScrollView,并开启了分页功能以方便展示100x100pt大小的图片。但是,当好友数量超过500时,这种方式效率极低且速度缓慢,因为需要一次性将所有图片加载到内存中。因此,我想使用TableView并在加载单元格时加载图片,但我又非常喜欢拥有分页功能的ScrollView所具有的吸附效果。
你建议如何为TableView添加这个功能呢?
将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
继承自 UIScrollView
,因此表格视图具有与滚动视图相同的 pagingEnabled
属性。只需像滚动视图一样向表格视图发送 -setPagingEnabled:YES
即可。
例如,在UITableViewController
子类实现中:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.pagingEnabled = YES;
}
我不喜欢启用UITableView的分页时出现的滚动效果,所以我编写了这两个TouchUpInside方法(使用Xamarin的C#语言),并禁用了表视图的分页。我添加了按钮,用户可以点击它们来转到下一页或上一页。向下翻页时,找到的下一个项目将滚动到表视图框架的顶部。向上翻页时,算法会在找到的项目上添加一行,以尝试显示不跨越表视图框架的项目。没有检查非常高的单元格是否大于表视图的边界。
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 );
}
code formatting
作为强调。通常情况下,请不要在您的建议编辑中添加强调。此外,没有必要使用 HTML 进行换行。您应该查看格式指南。 - Charles