IPhone应用程序在加载页面时滚动到UITableView中的给定位置

时间:2011-08-12 09:29:21

标签: iphone xcode xcode4.2

我想向下滚动到表格视图中的给定行。 如果我在按钮事件中使用以下代码,它可以正常工作。

[planTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:7 inSection:0 ] atScrollPosition:0 animated:YES];

但我想在页面加载后立即执行此操作。将代码置于viewDidLoad或viewDidAppear中的上方不起作用。

任何帮助??

2 个答案:

答案 0 :(得分:2)

UITableViewUIScrollView的子类,因此您只需在contentOffsetviewDidLoad:中设置tableView的viewWillAppear

如果您需要向下滚动7个表格视图单元格,请计算这7个单元格的高度(默认值为44px,但如果您有自定义单元格高度,则需要将其计算在内)并设置{{1}到contentOffset。在7个44px高度单元格的情况下,它将是CGPointMake(0, *calculated height*)

答案 1 :(得分:2)

它有点黑客,但你也可能想要执行-scrollToRowAtIndexPath:atScrollPosition:animated:有一些延迟,因为当调用-viewDidLoad或-viewDidAppear:时,表视图行还没有被创建,所以没有什么滚动到。

这样:

- (void)doScrolling
{
    [planTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:7 inSection:0 ] atScrollPosition:0 animated:YES];
}

和-viewDidAppear:

[self performSelector:@selector(doScrolling) withObject:nil afterDelay:0.3];

还要注意atScrollPosition:参数。它实际上是枚举:

typedef enum {
   UITableViewScrollPositionNone,
   UITableViewScrollPositionTop,
   UITableViewScrollPositionMiddle,
   UITableViewScrollPositionBottom
} UITableViewScrollPosition;

因此,如果该行可见并且传递了0,则不会执行滚动