2014-09-25 2 views
4

Следуя прошивкой 8 код называется каждый второй:UITextView SetText не должны прыгать вверх в ios8

- (void)appendString(NSString *)newString toTextView:(UITextView *)textView { 
    textView.scrollEnabled = NO; 
    textView.text = [NSString stringWithFormat:@"%@%@%@", textView.text, newString, @"\n"]; 
    textView.scrollEnabled = YES; 
    [textView scrollRangeToVisible:NSMakeRange(textView.text.length, 0)]; 
} 

Цель состоит в том, чтобы иметь один и тот же скроллинг вниз поведение в качестве консоли XCode, когда текст начинает работать со дна , К сожалению, setText заставляет просмотр сбрасываться на верх, прежде чем я смогу снова прокрутить страницу с помощью scrollRangeToVisible.

Это было решено в iOS7 с вышеуказанным кодом, и это сработало, но после обновления на прошлой неделе до iOS8 это решение больше не работает.

Я не могу понять, как это происходит свободно, без поведения прыжка?

ответ

-2

Попробуйте добавить текст в UITextView (без scrollRangeToVisible/scrollEnabled). Это швы, что взломать с включенной/отключенной прокруткой больше не требуется в SDK iOS8. UITextView автоматически прокручивается.

+0

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

+0

Это неправда, прокрутка не автоматическая для меня. – mikemeli

3

Следующие два решения не работают для меня на iOS 8.0.

textView.scrollEnabled = NO; 
[textView.setText: text]; 
textView.scrollEnabled = YES; 

и

CGPoint offset = textView.contentOffset; 
[textView.setText: text]; 
[textView setContentOffset:offset]; 

I установка делегат TextView контролировать событие прокрутки, и заметил, что после моей операции по восстановлению смещения, смещение сбрасывается на 0 разы. Поэтому я вместо этого использую основную очередь операций, чтобы убедиться, что моя операция восстановления происходит после опции «reset to 0».

Вот мое решение, которое работает для iOS 8.0.

CGPoint offset = self.textView.contentOffset; 
self.textView.attributedText = replace; 
[[NSOperationQueue mainQueue] addOperationWithBlock: ^{ 
    [self.textView setContentOffset: offset]; 
}]; 
+0

Если я использую scrollEnabled = NO и scrollEnabled = YES, то его работа с iOS 9, но не на iOS 8, и единственным решением, которое работает для меня, является установка смещения содержимого только в NSOperationQueue. Заслушайте голосование за ответ. – milanpanchal

28

Я также встречаюсь с этой проблемой. Вы можете попробовать это.

textView.layoutManager.allowsNonContiguousLayout = NO;

refrence: http://hayatomo.com/2014/09/26/1307

+0

wow..i уже давно это решает ... Спасибо за ваш ответ. –

+0

супер ... решает проблему даже на ios8 кажется – Catalin

+0

Это спасло меня, спасибо, спасибо! – neevek