在我的主视图控制器中,我提供了一个弹出窗口,它是一个UITableviewcontroller类,并且有一个可调整大小的textview作为其中一个单元格。现在随着内容的增长和文本视图的扩展,键入内容超出了键盘,并且在屏幕上看不到。为了解决这个问题,我计算了光标位置和键盘位置,并根据调整了tableviews内容偏移量,以便在键入时开始偏移调整以显示键盘上方的输入内容。它似乎工作,但根据我的逻辑现在的问题是,当有一个大内容,如果光标在底部,如果你滚动回顶部并开始键入光标保持在底部,它不会#39 ; t刚刚滚动到那里,因为我刚刚调整了20pt空间到内容偏移量。我不确定如何根据光标点计算tableview的内容偏移量。以下是我的代码。任何帮助表示赞赏。
-(void)adjustTextScroll:(UITextView *)textView
{
UITextRange *selectedTextRange = textView.selectedTextRange;
CGRect windowRect = CGRectZero;
if (selectedTextRange != nil)
{
CGRect caretRect = [textView caretRectForPosition:selectedTextRange.end];
windowRect = [textView convertRect:caretRect toView:nil];
}
//Checks if current cursor position is behind keyboard position
if (CGRectGetMinY(windowRect) > (keyboardYpos - 50)) // 50 added for space difference margin from keyboard
{
CGPoint contentOffset = self.tableView.contentOffset;
contentOffset.y += 20 ;
self.tableView.contentOffset = contentOffset;
}
}
//Keyboard notification
- (void)keyboardWasShown:(NSNotification *)notification
{
// Get the size of the keyboard.
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
CGFloat height = MIN(keyboardSize.height,keyboardSize.width);
CGFloat mainViewHeight = MAX([[UIScreen mainScreen]bounds].size.width,[[UIScreen mainScreen] bounds].size.height);
keyboardYpos = mainViewHeight - height;
}
- (void)textViewDidChange:(UITextView *)textView{
[self adjustTextScroll:textView]
}