启用分页时的UITableView页面大小

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)

  • 这个解决方案对我来说很有效,并适用于每个卷轴.另一种解决方案与其结果有点不一致......有时它会捕捉到单元格的顶部,有时则不会. (2认同)

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)


Ric*_*aez 5

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:使它更接近真实的东西,但不完全.

我一直在摆弄使用此处显示代码设置更快的减速率,但我无法做到正确.