2009-11-27 5 views
2

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

В основном я хочу настроить UITextView, чтобы написать его самую низкую часть, а не использовать его только для прокрутки.

Я видел некоторые подобные вопросы here, here и here. Однако я еще не видел правильного решения.

Благодаря

ответ

8

У меня немного другая реализация (я хочу отключить прокрутку), но мне также пришлось остановить курсор, выпрыгивающий из моего UITextView. Для этого я применил null scrollRectToVisible в моем подклассе UITextView. Как это:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 
{ 
// do nothing. This fixes the cursor jumping above the field defect. 
} 
+0

Это хороший намек. Возможно, я смогу повторно реализовать этот метод, чтобы сделать автоматический просмотр текста автоматически таким, каким он мне нужен. –

0

если я понимаю правильно, вы можете использовать

[textView setScrollEnabled:NO]; 

отключить скроллинг. что о не набирать, когда курсор достигнет нижнего края ... может быть, это не является хорошим решением, но вы можете добавить некоторое пороговое значение (максимальное количество символов в [textView text]) и возвращать NO в

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

делегировать метод UITextView, если [[textView text] length] > maxCharacters.

+0

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

0

Я считаю, кажется, свойство 'contentOffset' также может быть использована ...

2

отличное решение в подклассе UITextView добавить строки

-(void) setContentOffset:(CGPoint)contentOffset { 
    [self setContentInset:UIEdgeInsetsZero]; 
    [super setContentOffset:contentOffset]; 
} 

Это работа!

+0

Он работает!Спасибо, Зейн. – Seunghoon

0

использование этого

NSRange myRange=NSMakeRange(outPutTextView.text.length, 0); 

[outPutTextView scrollRangeToVisible:myRange]; 
0

Я получил последнюю строчку по setframe:

  1. Вы можете setframe до высоты линии
  2. При редактировании, в - (BOOL) textView:shouldChangeTextInRange:replacementText:, используйте scrollRangeToVisible:, аргумент selectedRange
  3. Когда вы закончите редактирование, setframe до первоначального размера
Смежные вопросы