2014-09-25 2 views
4

에 이어 아이폰 OS에서 상단으로 이동해서는 안 :UITextView의 setText 8 코드는 매 초라고 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)]; 
} 

. 불행히도, setText는 scrollRangeToVisible로 다시 스크롤하기 전에 뷰를 맨 위로 재설정합니다.

위의 코드로 iOS7에서 해결되었지만 효과가있었습니다.하지만 지난 주에 iOS8로 업그레이드 한 후에는 더 이상 작동하지 않습니다.

점핑 동작없이 유창하게 진행하는 방법을 알아낼 수 없습니까?

답변

-2

UITextView에 텍스트를 추가하기 만하면됩니다 (scrollRangeToVisible/scrollEnabled없이). iOS8 SDK에서 스크롤 사용/사용 중지 기능이 더 이상 필요하지 않은 솔기가 있습니다. 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 설치 텍스트 뷰에 위임 스크롤 이벤트를 모니터링하고, 내 작업이 오프셋을 복원 한 후, 오프셋 다시 0으로 재설정됩니다 것을 발견합니다. 그래서 나는 대신 메인 운영 큐를 사용하여 "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

와우 .. 나는 오랫동안이 문제를 이미 해결 해왔다. 당신의 대답에 감사드립니다. –

+0

슈퍼 ... ios8에서도 문제가 해결됩니다. – Catalin

+0

시간이 절약되었습니다. 감사합니다! – neevek