我想向下滚动到表格视图中的给定行。如果我在按钮事件中使用以下代码,它可以正常工作。
[planTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:7 inSection:0 ] atScrollPosition:0 animated:YES];
但我想在页面加载后立即执行。将上面的代码放在 viewDidLoad 或 viewDidAppear 中不起作用。
有什么帮助吗??
这有点 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,则不会执行滚动
UITableView
是 的子类UIScrollView
,因此您只需将contentOffset
tableView设置为viewDidLoad:
或viewWillAppear
。
如果您需要向下滚动 7 个表格视图单元格的长度,请计算这 7 个单元格的高度(默认为 44 像素,但如果您有自定义单元格高度,则需要将其考虑在内)并将其设置contentOffset
为 CGPointMake(0, *calculated height*)
. 在 7 个 44px 高度单元格的情况下,它将是CGPointMake(0, 308)
.