如何滚动到UITableViewCell的底部而不是TextField

时间:2014-08-28 19:17:46

标签: ios objective-c uitableview storyboard

我有一个静态tableView,每个textfield只有一个cell。单元格高度为50.我有以下方法来处理键盘:

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    self.tableView.contentInset = contentInsets;
    self.tableView.scrollIndicatorInsets = contentInsets;
}

现在,当我输入textField时,如果它位于键盘下方,它会自动滚动到textField。实际上,我不确定这是怎么回事,因为我没有在任何地方配置这种行为。这里发生了什么?

我真正想要的是滚动到cell的底部,而不是textField。目前,它滚动到textField,但它切断了部分cell并且看起来不太好。

contentInset.bottom是正确的,因为当键盘存在时我可以手动滚动到最后一个单元格。

我可能错过了一些原生行为。

2 个答案:

答案 0 :(得分:1)

我做这样的事情(未经测试)。在主视图的坐标系中找出单元格的框架。如果键盘顶部下方的单元格底部,请按差异调整表格视图的内容偏移量...

UITableViewCell *cell = // get the cell containing the text field

CGRect bounds = [self.tableView convertRect:cell.frame toView:self.view];
CGFloat cellBottom = bounds.origin.y + bounds.size.height;
if (cellBottom > kbSize.height) {
    [self.tableView setContentOffset:(cellBottom-kbSize.height) animated:YES];
}

有几个SO答案可以帮助您从文本字段中获取单元格。最好的方法是走上superview指针,直到找到UITableViewCell。 Here's an example where I answered this for a collection view

答案 1 :(得分:0)

正如@ rebello95所说,这是UITableViewController中的预期行为。要避免这种情况,只需从UIViewController而不是UITableViewController继承视图控制器,并自己将表视图添加到视图中。