1

我正在尝试滚动我的表格视图以在键盘处于活动状态时显示我的最后一个单元格。这就是我正在做的tableView:cellForRowAtIndexPath:......

if (keyboard) {

    CGFloat calculatedPosY = 70 * ([Array count]-1);
    MyTable.contentOffset = CGPointMake(0.0, calculatedPosY);

}

它第一次正常工作,但第二次重新加载表时它不滚动。第三次它再次滚动并显示表格的最后一个单元格。或者,代码正在运行,并且日志给出了相同的内容偏移量 (0,280)。

请告诉我是否做错了。提前致谢。

4

3 回答 3

1

您需要做两件事 - 1)确保表格视图适合键盘未覆盖的屏幕可见部分,以及 2)将表格滚动到最后一行。

要调整视图大小,我会注册以检测出现的键盘:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector (keyBoardWillShow:)
                                             name: UIKeyboardWillShowNotification object: nil];

keyBoardWillShow:当键盘出现并且您可以调整表格视图的大小时,将调用该方法:

- (void)keyBoardWillShow:(NSNotification *)aNotification
{
    NSValue *value = [[aNotification userInfo] objectForKey: UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [value CGRectValue];

    CGFrame tableFrame = self.tableView.frame;
    tableFrame.height -= keyboardRect.size.height 
    self.tableView.frame = tableFrame;
}

最后,滚动到最后一个单元格(keyBoardWillShow:如果你愿意,你可以这样做):

[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:lastRowIndex inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
于 2012-12-10T11:12:58.973 回答
0

不要在tableView:cellForRowAtIndexPath:.. 中这样做。此方法遍历所有数组元素并创建单元格。这意味着此计算运行 array[N] 次。

而是在之后运行一次[self.tableView reloadData]

或者试试这个:

NSInteger *cells_count // You can have it from - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section.

//Run this after [tableView reloadData]
NSIndexPath* indexPath = [NSIndexPath indexPathForRow:cells_count-1 inSection:0];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated: NO];
于 2012-12-10T10:09:49.047 回答
0

我建议你使用 - scrollToRowAtIndexPath:atScrollPosition:animated:。它是 UITableView 中的一个方法。

于 2012-12-10T10:51:16.327 回答