0

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

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

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

有什么帮助吗??

4

2 回答 2

2

这有点 hack,但您可能还想执行 -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,则不会执行滚动

于 2011-08-12T10:03:25.903 回答
2

UITableView是 的子类UIScrollView,因此您只需将contentOffsettableView设置为viewDidLoad:viewWillAppear

如果您需要向下滚动 7 个表格视图单元格的长度,请计算这 7 个单元格的高度(默认为 44 像素,但如果您有自定义单元格高度,则需要将其考虑在内)并将其设置contentOffsetCGPointMake(0, *calculated height*). 在 7 个 44px 高度单元格的情况下,它将是CGPointMake(0, 308).

于 2011-08-12T09:41:53.073 回答