내 JSON 파일에서 오는 긴 텍스트가 있지만 UITableViewCell에서 링크를 클릭하여 UIViewController 페이지로 이동하면 UITextView 텍스트가 문자열 콘텐츠를로드하지만 처음부터 콘텐츠를 표시하지 않고 모두 위로 스크롤해야합니다. 시간.
내가 해야하는 것?
답변
나는 같은 문제가 있었고 그것이 효과를 내기 위해 viewDidLayoutSubviews에서 콘텐츠 오프셋을 설정해야했습니다. 이 코드를 사용하여 속성 정적 텍스트를 표시하고 있습니다.
- (void)viewDidLayoutSubviews {
[self.yourTextView setContentOffset:CGPointZero animated:NO];
}
SWIFT 3 :
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
self.textView.setContentOffset(CGPoint.zero, animated: false)
}
답변
이것이 나를 위해 일한 유일한 방법입니다. UITextView 의 스크롤을 비활성화합니다.뷰가로드되기 전에 한 다음 다시 활성화합니다.
override func viewWillAppear(_ animated: Bool) {
yourTextView.isScrollEnabled = false
}
override func viewDidAppear(_ animated: Bool) {
yourTextView.isScrollEnabled = true
}
답변
[self.textView scrollRangeToVisible:NSMakeRange(0, 1)];
에 viewDidLoad
답변
콘텐츠를로드하기 전에 프로그래밍 방식으로 textview의 스크롤 속성을 비활성화합니다.
textview.scrollenabled = NO;
그리고 로딩 후 textview 스크롤을 활성화하십시오. textview.scrollenabled = YES;
뿐만 아니라 XIB
항상 Textview의 스크롤링을 확인하지 마십시오.
답변
iOS 10의 UITextView 상단에있는 빈 공간 질문에 대한 답변 은 훨씬 더 깨끗한 최종 사용자 경험을 제공합니다.
에서는 viewDidLoad
텍스트 뷰를 포함하는 뷰 컨트롤러 :
self.automaticallyAdjustsScrollViewInsets = false
설정 textView.setContentOffset(CGPointMake(0,0), animated: false)
및 이러한 기타 제안 중 일부는 호출시 작동 viewDidLayoutSubviews()
하지만 iPad 2 및 이전 버전과 같은 구형 장치에서는 화면이 표시 될 때 실제로 텍스트가 스크롤되는 것을 볼 수 있습니다. 그것은 최종 사용자가보기를 원하는 것이 아닙니다.
답변
이 솔루션을 사용한 후에도 여전히 문제가 발생했습니다. 이 문제는 투명 탐색 막대가 있고 뷰 컨트롤러에서 콘텐츠 삽입을 자동으로 조정하도록 선택하는 것과 관련이있는 것 같습니다. 내비게이션 바 아래에서 스크롤되는 텍스트에 신경 쓰지 않는다면이 설정을 끄고 textview의 상단을 viewcontroller의 상단이 아닌 내비게이션 바의 하단으로 제한하는 것이 가장 좋습니다.
저처럼 아래로 스크롤 할 때 내비게이션 바 아래에 표시되기를 원했습니다. 나를 위해 일한 해결책은 이것을 추가하는 것이 었습니다.
- (void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGFloat offset = self.navigationController.navigationBar.frame.size.height+[UIApplication sharedApplication].statusBarFrame.size.height;
[self.textView setContentOffset:CGPointMake(0, -offset) animated:NO];
}
탐색 표시 줄과 상태 표시 줄의 높이를 찾고 그에 따라 콘텐츠 오프셋을 조정합니다.
이 접근 방식의 한 가지 단점은 장치가 회전 할 때 맨 위로 스크롤된다는 것입니다.
답변
나 에게이 코드는 잘 작동합니다.
textView.attributedText = newText //or textView.text = ...
//this part of code scrolls to top
textView.contentOffset.y = -64 //or = 0 if no Navigation Bar
textView.scrollEnabled = false
textView.layoutIfNeeded()
textView.scrollEnabled = true
정확한 위치로 스크롤하여 화면 상단에 표시하려면 다음 코드를 사용합니다.
var scrollToLocation = 50 //<needed position>
textView.contentOffset.y = textView.contentSize.height
textView.scrollRangeToVisible(NSRange.init(location: scrollToLocation, length: 1))
contentOffset.y를 설정하면 텍스트 끝으로 스크롤 한 다음 scrollRangeToVisible은 scrollToLocation 값까지 스크롤합니다. 따라서 필요한 위치가 scrollView의 첫 번째 줄에 나타납니다.
