Почему NSString sizeWithFont: возвращает неправильный размер?

Мне нужно определить высоту 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 Метод состоит из четырех символов. Вот пара скриншотов, показывающих, что я имею в виду:Высота с тремя символами на линииВысота с четырьмя символами на линии

Кто-нибудь может сказать мне, что происходит?

1 ответ

Решение

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

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

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

Другие вопросы по тегам