Почему NSString sizeWithFont: возвращает неправильный размер? - PullRequest
3 голосов
/ 13 мая 2011

Мне нужно определить высоту 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 Ответ

6 голосов
/ 13 мая 2011

@ Комментарий Владимира верен, я думаю - строка NSString не учитывает поля UITextField.

Вы можете попробовать получить текст перед курсором и создать новый UITextField, который содержит только этот текст.

Тогда, если вы вызовете [tempTextField sizeToFit] в своем новом текстовом поле, тогда его границы должны соответствовать размеру, который вы ищете.

...