代码之家  ›  专栏  ›  技术社区  ›  Simon Woodside

获取一个uiTableView从底部向上滚动/捕捉到底部,而不是顶部

  •  1
  • Simon Woodside  · 技术社区  · 16 年前

    我有一个表视图,在很多情况下,只有一个或两个单元格不填充屏幕。在这种情况下,我希望单元格位于底部,而不是顶部。换句话说,它们应该“捕捉”到TableView的底部。

    我可以强制表视图如下滚动到底部:

      CGPoint bottomOffset = CGPointMake(0, [self.tableView contentSize].height - self.tableView.frame.size.height);
      [self.tableView setContentOffset:bottomOffset animated:NO];
    

    然而,这只是部分成功。首先,如果我把它放在viewdidload中,或者viewwill出现,它就不起作用了,只在viewdidappear中出现,这意味着用户首先看到表视图,单元格位于顶部,然后移动到底部。其次,如果他们滚动表视图,当他们放开它时,它会自动“捕捉”回到顶部。

    有人知道如何改变这种行为吗?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Terry Longrie    16 年前

    要考虑的一个选项是根据要显示的行数调整uiTableView本身的大小。假定您的UITableViewDelegate实现了HeightForRowatindexPath,然后可以通过将行数乘以每行的高度来设置ViewWillDisplay方法中的UITableView的高度。

    像这样:

    CGRect frame = [myTableView frame];
    
    frame.size.height = [[myTableView dataSource] tableView: myTableView numberOfRowsInSection: 0] *
                        [[myTableView delegate] tableView: myTableView heightForRowAtIndexPath: [NSIndexPath indexPathForRow: 0 inSection: 0]];
    
    [myTableView setFrame: frame];
    

    此示例假定您的表有一个部分,并且每行的高度相同。如果涉及多个部分,或者不同的行的高度不同,那么计算大小就需要稍微复杂一点。

    不管高度是如何计算的,这个想法的本质是使桌子本身变短,不比它显示的一行或两行高,而不是强迫它改变行为。

    推荐文章