我有一个UITableView
,其单元格包含UITextView
。轻按UITextView
时,将显示键盘,并且整个文本视图都位于键盘上方。滚动时,关闭键盘。 UITextViews
的高度可能很大,用户可能希望点击文本视图中间的某个位置。然后,我希望UITextView
中的光标位于键盘上方。为此,我尝试计算光标在文本视图中的位置,并且由于某种原因在大多数情况下会弄错它。我尝试通过以下两种方式进行计算:
在-(void)textViewDidBeginEditing:(UITextView *)textView
中,我可以尝试:
[textView caretRectForPosition:textView.selectedTextRange.start].origin
或:
UITextRange *textRange = [textView textRangeFromPosition:textView.beginningOfDocument toPosition:textView.selectedTextRange.start];
NSString *text = [textView textInRange:textRange];
CGFloat width = textView.frame.size.width;
CGSize constraintSize = CGSizeMake(width, CGFLOAT_MAX);
CGRect boundingBox = [text boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: textView.font} context:nil];
CGFloat height = boundingBox.size.height;
据我所知,第一个应该让我知道光标上端的位置,第二个应该让我光标下端的位置。但是,它们都返回错误的位置。我注意到第二种方法中的文本也是错误的文本,返回的光标位置对于给定的文本是正确的。因此看起来好像是触摸错误或发生了什么,但随后光标位于正确的位置。
有什么问题?预先谢谢你。