[iphone] 텍스트를 변경할 때마다 UITextView를 맨 위로 스크롤하려면 어떻게해야합니까?

OK, 나는 몇 가지 문제가 있어요 UITextView. 문제는 다음과 같습니다.

나는 UITextView. 그런 다음 사용자는 두 번 클릭하여 항목을 선택합니다. 그런 다음 UITextView(위와 같이 프로그래밍 방식으로) 텍스트를 변경하고 UITextView 커서가있는 페이지 하단으로 스크롤합니다.

그러나 그것은 사용자가 클릭 한 곳이 아닙니다. UITextView사용자가 클릭 한 위치에 관계없이 항상 맨 아래로 스크롤됩니다 .

그래서 여기에 내 질문이 UITextView있습니다. 텍스트를 변경할 때마다 어떻게 강제로 맨 위로 스크롤합니까? 나는 해봤 contentOffset하고 scrollRangeToVisible. 둘 다 작동하지 않습니다.

모든 제안을 주시면 감사하겠습니다.



답변

UITextView*note;
[note setContentOffset:CGPointZero animated:YES];

이것은 나를 위해 그것을합니다.

Swift 버전 (Xcode 9.3에서 iOS 11이 설치된 Swift 4.1) :

note.setContentOffset(.zero, animated: true)


답변

사람이 아이폰 OS 8에서이 문제가 있다면, 그건 바로 설정을 발견 UITextView's한 후 호출, 텍스트 속성을 scrollRangeToVisibleNSRangelocation:0, length:0,했다. 내 텍스트보기는 편집 할 수 없었고 선택 가능과 선택 불가능을 테스트했습니다 (두 설정 모두 결과에 영향을주지 않음). 다음은 Swift의 예입니다.

myTextView.text = "Text that is long enough to scroll"
myTextView.scrollRangeToVisible(NSRange(location:0, length:0))


답변

그리고 여기 내 해결책이 있습니다 …

    override func viewDidLoad() {
        textView.scrollEnabled = false
        textView.text = "your text"
    }

    override func viewDidAppear(animated: Bool) {
        textView.scrollEnabled = true
    }


답변

부름

scrollRangeToVisible(NSMakeRange(0, 0))

작동하지만 전화

override func viewDidAppear(animated: Bool)


답변

HTML에서 편집 할 수없는 텍스트보기로 attributeString을 사용했습니다. 콘텐츠 오프셋 설정도 나에게 효과적이지 않았습니다. 이것은 나를 위해 일했습니다 : 스크롤 활성화를 비활성화하고 텍스트를 설정 한 다음 스크롤을 다시 활성화하십시오.

[yourTextView setScrollEnabled:NO];
yourTextView.text = yourtext;
[yourTextView setScrollEnabled:YES];


답변

이러한 솔루션 중 어느 것도 저에게 효과가 없었고 솔루션을 결합하는 데 너무 많은 시간을 낭비했기 때문에 마침내 해결되었습니다.

override func viewWillAppear(animated: Bool) {
    dispatch_async(dispatch_get_main_queue(), {
        let desiredOffset = CGPoint(x: 0, y: -self.textView.contentInset.top)
        self.textView.setContentOffset(desiredOffset, animated: false)
    })
}

이 컨트롤의 기본 동작이 아니라는 것은 정말 어리석은 일입니다.

이 정보가 다른 사람에게 도움이되기를 바랍니다.


답변

질문을 이해했는지 확실하지 않지만 단순히보기를 맨 위로 스크롤하려고합니까? 만약 그렇다면


[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];