max*_*nna 13 paging objective-c uitableview iphone-sdk-3.0
我面临着一个简单而乏味的问题.我想要做的是使一个的UITableView像一个UIScrollView的页面,但使分页不帮我这么多,因为我无法设置页面尺寸,以便实现代码如下恰好滚动的高度,因此它显示1行... 10或11 ...... 20等等.我想要的是,当我滚动(因此分页)而没有一种固定范围的显示单元格时,没有单元格保留在视图上方或下方.
非常感谢
小智 17
更简单,更高效:)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
if(decelerate) return;
[self scrollViewDidEndDecelerating:scrollView];
}
- (void)scrollViewDidEndDecelerating:(UITableView *)tableView {
[tableView scrollToRowAtIndexPath:[tableView indexPathForRowAtPoint: CGPointMake(tableView.contentOffset.x, tableView.contentOffset.y+tableView.rowHeight/2)] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
max*_*nna 13
简单但高效:
- (void)scrollViewDidEndDecelerating:(UITableView *)tableView {
int tomove = ((int)tableView.contentOffset.y%(int)tableView.rowHeight);
if(tomove < tableView.rowHeight/2) [tableView setContentOffset:CGPointMake(0, tableView.contentOffset.y-tomove) animated:YES];
else [tableView setContentOffset:CGPointMake(0, tableView.contentOffset.y+(tableView.rowHeight-tomove)) animated:YES];
}
- (void)scrollViewDidEndDragging:(UITableView *)scrollView willDecelerate:(BOOL)decelerate {
if(decelerate) return;
[self scrollViewDidEndDecelerating:scrollView];
}
Run Code Online (Sandbox Code Playgroud)
从k06a的答案开始,我对它进行了一些改进,使其更像真正的分页UITableView.全屏表行的行为差异非常明显.即使是任何一个方向的微型滑动都应该将表格滚动到下一页:我首先通过检查速度来做到这一点.
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView
withVelocity:(CGPoint)velocity
targetContentOffset:(inout CGPoint *)targetContentOffset
{
CGFloat rowHeight = tableView.rowHeight;
int verticalOffset = ((int)targetContentOffset->y % (int)rowHeight);
if (velocity.y < 0)
{
targetContentOffset->y -= verticalOffset;
}
else if (velocity.y > 0)
{
targetContentOffset->y += (rowHeight - verticalOffset);
}
// No velocity, snap to closest page
else
{
if (verticalOffset < rowHeight / 2)
{
targetContentOffset->y -= verticalOffset;
}
else
{
targetContentOffset->y += (rowHeight - verticalOffset);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意另外设置
self.tableView.decelerationRate = UIScrollViewDecelerationRateFast;
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad:使它更接近真实的东西,但不完全.
我一直在摆弄使用此处显示的代码设置更快的减速率,但我无法做到正确.
| 归档时间: |
|
| 查看次数: |
13597 次 |
| 最近记录: |