我正在尝试在表格视图底部的表格单元格中实现UITextView。
我已经尝试过这里的建议Making a UITableView scroll when text field is selected以及其他解决方案,但它们有点不同,因为我必须人为地为当前视图添加额外的高度,以便为键盘创建空间。
以下是我在上一个解决方案中添加的内容,以便将其移植到我的应用程序中。
-(void) keyboardWillShow:(NSNotification *)note {
CGRect frame = self.view.frame;
frame.size.height += keyboardHeight;
frame.origin.y -= keyboardHeight;
self.view.frame = frame;
}
-(void) keyboardWillHide:(NSNotification *)note
{
CGRect frame = self.view.frame;
frame.size.height -= keyboardHeight;
frame.origin.y += keyboardHeight;
}
这样做会正确地向视图添加高度并滚动到单元格,但在恢复原始视图的高度后,滚动超出当前可见视图变得不可能,即使边界外有有效内容(我看到滚动条弹回之前的文本视图。) 如果我尝试在keyboardWillShow中保存tableview的框架或边界(而不是视图)并在keyboardWillHide中恢复它们,则会恢复滚动,但视图将减少一半。
除了对视图底部的额外高度进行硬编码外,是否有任何补救措施?
答案 0 :(得分:3)
通过删除编辑视图原点的代码,我能够解决锁定滚动的问题。另外,我在计算中使用tableview的contentSize属性实现了向底部单元格的滚动。
-(void) keyboardWillShow:(NSNotification *)note
{
if(!isKeyboardShowing)
{
isKeyboardShowing = YES;
CGRect keyboardBounds;
[[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardBounds];
CGFloat keyboardHeight = keyboardBounds.size.height;
CGRect frame = self.view.frame;
frame.size.height += keyboardHeight;
self.view.frame = frame;
CGPoint scrollPoint = frame.origin;
scrollPoint.y += _tableView.contentSize.height - keyboardHeight;
[_tableView setContentOffset:scrollPoint animated:YES];
}
}