为什么NSString sizeWithFont:返回错误的大小?

Ric*_*evy 3 iphone cocoa-touch nsstring uitextview

我需要将UITextView的高度从上到下计算到光标.我正在修剪它包含的文本(因此它只能到达光标),然后使用NSString的sizeWithFont:constrainedToSize:lineBreakMode:方法来计算高度,如下所示:

   NSRange range;
   range.location = noteTextView.selectedRange.location;
   range.length = noteTextView.text.length - range.location;

   NSString *string = [noteTextView.text stringByReplacingCharactersInRange:range withString:@""];

   CGSize size = [string sizeWithFont:noteTextView.font 
                     constrainedToSize:noteTextView.frame.size 
                         lineBreakMode:UILineBreakModeWordWrap];

   NSLog(@"height is: %f \n", size.height);
Run Code Online (Sandbox Code Playgroud)

每当我输入任何东西时都会这样做.

问题是,当我在键入时观察NSLog时,在我在新行上键入4个字符之前,它不会记录高度的变化.就好像该sizeWithFont方法恰好是四个字符.这里有两个屏幕截图显示我的意思: 在线有三个字符的高度 在线高度有四个字符

谁能告诉我发生了什么事?

dea*_*rne 6

@ Vladimir的评论是正确的我认为 - NSString没有考虑UITextField的边距.

您可以尝试获取光标前的文本并创建仅包含该文本的新UITextField.

然后,如果你调用[tempTextField sizeToFit]你的新文本字段,那么它的界限应该是你要查找的大小.