iOS 10에서 UITextView 상단의 빈 공간


116

일부 텍스트가있는 UITextView가 있습니다. iOS 6에서는 모든 것이 괜찮 았지만 이제 iOS 7에서는 상단에 빈 공간을 남겨두고 텍스트보기의 중간 아래에 텍스트를 배치합니다.여기에 이미지 설명 입력

contentOffSet을 설정하지 않았습니다. 도와주세요!

답변:


217

텍스트보기는 스크롤보기입니다. 보기 컨트롤러는 탐색 표시 줄과 상태 표시 줄 뒤에서 위로 스크롤하려는 것으로 가정하므로 스크롤보기에 콘텐츠 오프셋을 자동으로 추가합니다.

이를 방지하려면 텍스트 뷰를 포함하는 뷰 컨트롤러에서 다음 속성을 설정하십시오.

self.automaticallyAdjustsScrollViewInsets = NO

7
문제를 해결하는 방법뿐만 아니라 처음에 문제가 발생하는 이유를 다루기 때문에 더 나은 대답입니다.
Stephen Melvin

1
BTW, 하위 클래스 및 재정의 할 필요가 없습니다. UITextView를 인스턴스화 한 후 automaticAdjustsScrollViewInsets를 NO로 설정하기 만하면됩니다.
leftspin

1
@leftspin은 뷰 컨트롤러를 서브 클래 싱하지 않은 매우 드문 경우입니다. 메서드를 재정의하면 코드가 낮은 iOS 버전에서 계속 작동합니다. 속성을 설정하면 먼저 호환성 확인이 필요합니다.
jrturton

1
따라서 내 모델 뷰 컨트롤러가 UINavigationController 외부에 있으면 오프셋이 지워 집니까? 그것은 일종의 미친 것입니다 ...이 동작은 내 textview가 상단에 정렬되었을 때만 정확합니다. 그렇지 않으면 쓰레기입니다 ... Apple이 왜 그런 일을했는지 ​​설명 할 수 있습니까?
Paul Brewczynski

@jrturton이 이전 게시물 인 것에 대해 사과하고 Objective-c를 처음 접했지만 이것은 현재 UIViewController의 속성입니다 ... 방법으로 사용 되었습니까?
크레이그

58

IronManGill이 제공 한 현재 답변은 처음부터 문제가 발생하는 이유에 대한 이해를 기반으로하지 않기 때문에 좋은 해결책이 아닙니다.

jrturton의 대답은 또한 그것을 해결하는 가장 깨끗한 방법이 아닙니다. 재정의 할 필요가 없습니다. 간단하게!

다음을 설정하기 만하면됩니다.

self.automaticallyAdjustsScrollViewInsets = NO;

viewDidLoad 메서드에서.

문서 확인 : https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
때때로 스토리 보드를 변경하는 것이 더 낫습니다. "Identity Inspector"-> "User Defined Runtime Attributes"로 이동하여 정의를 추가하십시오.
hufeng03

automaticallyAdjustsScrollViewInsets 더 이상 사용되지 않습니다. iOS11에서 사용contentInsetAdjustmentBehavior
Cœur

47

인터페이스 빌더에서

  • UITextView를 포함하는 뷰 컨트롤러를 선택합니다.
  • 속성 검사기로 이동합니다.
  • "Adjust Scroll View Insets"를 선택 취소합니다.

이것은 ios8에서 제 케이스를위한 가장 쉬운 솔루션입니다
platinor

3
참고 : UIViewController의 속성입니다. 다음을 찾을 수 없습니다 내가 완전히 텍스트를 읽어 보지 않았 실현
Maik639

37

이것은 나를 위해 일했습니다.

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;

24

이동 Interface Builder:

  1. view controller포함하는 선택text view
  2. Adjusts Scroll View Insets속성 선택 취소

여기에 이미지 설명 입력


이것이 제가 찾던 것입니다. 또한 당신의 ViewController에 'self.automaticallyAdjustsScrollViewInsets = 거짓'를 추가하여이 작업을 수행 할 수 있습니다
CodeOverRide

이것은 "이 텍스트가 표시되지 않는 이유"에 대한 검색을 끝내기 위해 우연히 발생한 훌륭하고 격렬한 답변입니다.
UpSampler

10

이이 64 포인트 자동 삽입이 경우에만 추가 ... 진정한 기능의 경우 정말 궁금 UIScrollView또는 UITextView뷰 컨트롤러의 뷰의 모든 파단의 큰의 깊이로. 예를 들어 스크롤 뷰 뒤에 뷰를 추가하는 경우 (여기서는 뷰 임 브리 케이션이 아닌 z 버퍼에 대해 이야기합니다)이 64 포인트 삽입은 자동으로 추가되지 않습니다.

예를 들어 다음은 삽입을 추가합니다.

여기에 이미지 설명 입력

이 경우 삽입은 추가되지 않습니다.

여기에 이미지 설명 입력

이건 정말 이상해 보입니다. OS가 뷰를 확장해야하는지 여부를 결정하기 위해 뷰의 깊이를 확인하는 이유는 무엇입니까?



6

다음 UITextView을 추가하여 상단의 빈 공간을 삭제할 수 있습니다 .

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

콘텐츠 오프셋을 음수 값으로 설정하여이 문제를 해결했습니다. 다음은 Swift 코드입니다.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

이것은 반투명 막대 아래에서 삽입과 스크롤을 올바르게 유지하는 최상의 솔루션이었습니다. 이 수정을 제안합니다. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
이것을 제외하고는 아무것도 나를 위해 일하지 않았습니다. Swift, Xcode 9.1.
Ashok

1

이해해야 할 것은 이것이 탐색 모음과 관련이 있다는 것입니다.

  • 콘텐츠가 탐색 모음 아래에있는 경우보기 컨트롤러가 스크롤보기 삽입 (기본값)을 자동으로 조정하도록 할 수 있습니다.
  • 콘텐츠가 내비게이션 바 아래로 이동하지 않는 경우 (상단 공간 제약에 대해 상단 레이아웃 가이드를 사용했을 가능성이 높음) 대부분의 다른 답변에서 언급 한 것처럼 자동 스크롤보기 삽입 조정을 비활성화 할 수 있습니다.

1

나는 다음 트릭을 시도했지만 효과가 있었다.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}


0

이것은 비전문적 인 솔루션입니다. 확신합니다 ... 그러나 textview 뒤에 빈 레이블을 두는 것만으로 문제가 해결됩니다.


1
이것은) = 용액 아니다
케르 Baltaci

0

이것은 나를 위해 일했습니다 (iOS 7에서 사용 가능)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.