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.