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

时间:2011-05-13 10:35:24

标签: 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);

每次输入任何内容时都会这样做。

问题是,当我输入NSLog时,在我在新行上键入4个字符之前,它没有记录高度的变化。好像sizeWithFont方法恰好是四个字符。这里有两个屏幕截图显示我的意思: Height with three characters on line Height with four characters on line

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

1 个答案:

答案 0 :(得分:6)

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

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

然后,如果您在新文本字段上调用[tempTextField sizeToFit],那么它的边界应该是您要查找的尺寸。