代码之家  ›  专栏  ›  技术社区  ›  RunLoop

将UITableView行滚动到顶部,即使表仅包含几行

  •  0
  • RunLoop  · 技术社区  · 14 年前

    我有一个UITableView,它有时只有几行。我想在表的顶部显示一个特定的行,例如第2行(共3行)。但是,当行数没有填满整个表时,调用以下命令没有任何效果:

    [TableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:indexOfTopItem inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:NO]
    

    有没有一种方法可以强制一行显示在顶部,即使表中的行数有限?谢谢

    3 回复  |  直到 14 年前
        1
  •  0
  •   RunLoop    14 年前

    实现这一点的唯一方法是设置表的contentOffset。这将确保所需的行出现在表的顶部,即使这些行没有填满整个表。

        2
  •  -1
  •   nebs    14 年前

    我不确定我是否完全理解您想要什么,但是如果您想在表的顶部放置一个特定的单元格,为什么不重新排列数据而不是视图呢?

    假设您的单元格(行)数据不是硬编码的,您可以执行以下操作:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        if ([indexPath row] == 0){
            // Load the data you want to appear at the top
        }else {
            // Load the rest of the data
        }
    }
    

    但是,您必须手动跟踪顶行数据,因此这可能不是最佳解决方案。

    或者,如果您的数据在一个数组中,您可以将要放在上面的元素与数组中的第一个元素交换,然后调用[myTableView reloadData]来重新加载数据。在这种情况下,不必更改cellforrowatinexpath。

    当然,这不是很有效,因为您正在操作数组并重新加载表,但是如果表只有几行,并且您不必经常进行这种交换,那么这可能是可以接受的。

        3
  •  -1
  •   jrtc27    14 年前

    numberOfRowsInSection 方法检查一个BOOL,然后设置正确的行数。然后在 cellForRowAtIndexPath 方法,再次检查BOOL,并返回有效的单元格。按下按钮,设置BOOL,并调用tableView的 reloadData