我在底部有一个滚动视图,表格视图和文本字段,点击后会触发键盘显示。 表格视图只是滚动视图中的一个子视图,用于显示该照片的一些注释。
一开始,tableView高度显示正确。但是,在单击类中的任何textField后,tableView高度已更改。任何人都有解决方案。
我测试了键盘高度。它会影响UITableView的附加高度。 但我对如何保持高度与键盘显示之前的高度没有任何想法。
请帮忙。
以下是一些代码,
//---when a TextField view begins editing---
-(BOOL) textFieldDidBeginEditing:(UITextField *)textFieldView {
currentTextField = textFieldView;
return YES;
}
-(BOOL) textFieldShouldReturn:(UITextField *) textFieldView {
[textFieldView resignFirstResponder];
return NO;
}
//---when a TextField view is done editing---
-(void) textFieldDidEndEditing:(UITextField *) textFieldView {
currentTextField = nil;
}
//---when the keyboard appears---
-(void) keyboardDidShow:(NSNotification *) notification {
if (keyboardIsShown) return;
NSDictionary* info = [notification userInfo];
//---obtain the size of the keyboard---
NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].size;
//---resize the scroll view (with keyboard)---
CGRect viewFrame = [v_comment_editor frame];
viewFrame.size.height -= keyboardSize.height;
v_comment_editor.frame = viewFrame;
//---scroll to the current text field---
CGRect textFieldRect = [currentTextField frame];
[v_comment_editor scrollRectToVisible:textFieldRect animated:YES];
keyboardIsShown = YES;
}
//---when the keyboard disappears---
-(void) keyboardDidHide:(NSNotification *) notification {
NSDictionary* info = [notification userInfo];
//---obtain the size of the keyboard---
NSValue *aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardSize = [aValue CGRectValue].size;
//---resize the scroll view back to the original size (without keyboard)---
CGRect viewFrame = [v_comment_editor frame];
viewFrame.size.height += keyboardSize.height;
v_comment_editor.frame = viewFrame;
keyboardIsShown = NO;
}
-(void) viewWillDisappear:(BOOL)animated {
//---removes the notifications for keyboard---
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
}
答案 0 :(得分:0)
可能有助于查看UIScrollView's contentOffset
和contentInset
属性。此外,它还有助于理解scrollView的bounds
与frame
之间的区别。
我强烈建议您创建一个简单的测试项目并尝试上述概念。深入了解将使您的生活更轻松。
注意:请注意半透明导航栏及其对上述属性的影响。
答案 1 :(得分:0)
显示的代码会在显示键盘时调整视图大小。当键盘再次被隐藏时,它看起来应该恢复到正确的大小。
如果您对其中一个子视图有疑问,可能会以奇怪的方式设置自动调整大小的掩码。
最简单的方法是在处理类中有一个实例变量,如:
CGRect tableframe;
并在 keyboarddidshow 函数中将正确的帧存储到其中,并将表格恢复为** keyboardDidHide **方法中的原始帧。
答案 2 :(得分:0)
对于所有其他人的参考,如果您再次遇到此问题。
我以前解决的问题是在keyboardDidHide中重新调整大小,代码如下:
CGRect frame = tbl_comment.frame;
frame.size.height = 145;
tbl_comment.frame = frame;