我想向下滚动到表格视图中的给定行。 如果我在按钮事件中使用以下代码,它可以正常工作。
[planTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:7 inSection:0 ] atScrollPosition:0 animated:YES];
但我想在页面加载后立即执行此操作。将代码置于viewDidLoad或viewDidAppear中的上方不起作用。
任何帮助??
答案 0 :(得分:2)
UITableView
是UIScrollView
的子类,因此您只需在contentOffset
或viewDidLoad:
中设置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,则不会执行滚动