我有一个静态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
是正确的,因为当键盘存在时我可以手动滚动到最后一个单元格。
我可能错过了一些原生行为。
答案 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继承视图控制器,并自己将表视图添加到视图中。