2010-04-05 1 views
6

По умолчанию содержимое содержимого UITextView становится прокручиваемым, когда слишком много текста помещается в текстовое представление на основе его высоты.UITextView изменение высоты вместо прокрутки

Я бы хотел отключить это и вместо этого обновить высоту UITextView, чтобы вписаться в текст. Причина, по которой я делаю это, заключается в том, что я добавляю UITextView в качестве подзадача UIScrollView, который должен обрабатывать прокрутку, как и в приложении родной почты (при вводе текста весь просмотр прокручивается вверх, а не только текст .

Любой получил некоторые идеи/впала в той же проблемой, прежде чем

ответ

20

Это очень просто делается так:

CGRect frame = textView.frame; 

frame.size = textView.contentSize; 

textView.frame = frame; 

Это должно установить высоту TextView, чтобы надлежащим образом соответствовать всем его содержание.

+0

Это здорово. Мне пришлось добавить несколько вещей, которые я опубликую в новом ответе из-за форматирования комментариев. –

+0

Это отлично работает в iOS5, но по какой-то причине на iOS4 курсор продолжает дрейфовать за пределы видимости. –

+0

Спасибо, человек, спас мне много времени! – Mateus

9

Немного l ittle изменяется:

-(void)textViewDidChange:(UITextView *)textView { 

    CGFloat fontHeight = (textView.font.ascender - textView.font.descender) + 1; 

    CGRect newTextFrame = textView.frame; 
    newTextFrame.size = textView.contentSize; 
    newTextFrame.size.height = newTextFrame.size.height + fontHeight; 
    textView.frame = newTextFrame; 
} 

Добавление высоты шрифта дает место для окна автокоррекции, когда вы что-то неправильно произносите.

UITextView также должен быть установлен не пролистайте:

[aTextView setScrollEnabled:NO]; 
+0

Как эта ручка прокручивает представление курсора? –

+0

Это должен быть принятый ответ. –

+0

Вы также можете установить textView.clipsToBounds = NO; чтобы окно автокоррекции не обрезалось. –