UIScrollView contentInset 속성은 무엇입니까?


159

누군가 UIScrollView인스턴스 의 contentInset 속성 이 사용되는 이유를 설명 할 수 있습니까 ? 그리고 예를 들어 줄까요?

답변:


242

콘텐츠보기와 주변 스크롤보기 사이의 삽입 거리를 설정합니다.

Obj-C

aScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 7.0);

스위프트 5.0

aScrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 7.0)

다음 은 유익한 스크린 샷이있는 스크롤 뷰에 대한 좋은 iOS 참조 라이브러리 기사입니다 (그림 1-3). 여기에 텍스트를 통해 복제하겠습니다.

  _|←_cW_→_|_↓_
   |       | 
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
  _|_______|___ 
             ↑


   (cH = contentSize.height; cW = contentSize.width)

스크롤보기는 콘텐츠보기와 지정된 콘텐츠 삽입에 의해 제공되는 패딩을 포함합니다.


UIScrollView에 패딩을 추가하는 데 사용됩니까? 그렇지 않다면 실제적인 예를 들어 주실 수 있습니다. 내 문제는 구현 방법이 아니라 구현시기입니다.
ForeignerBR

28
예, 스크롤 뷰 내부의 내용을 채 웁니다. CSS padding속성 과 유사 합니다.
Marc W

이것에 피기 백해서 죄송합니다. 자체 질문을 옮길 수는 있지만이를 기반으로 각 contentInset 값을 예를 들어 contentHeight가 아닌 0으로 설정하면 실제로 어떻게됩니까? 전체 스크롤 뷰가 설정 한 높이가되도록 강제합니까?
jakev

@jakev 아니요, .frame 속성은 부모 내에서 scrollview의 크기를 제어합니다 (이 답변 참조 : stackoverflow.com/questions/5361369/… ). 모든면에 대해 contentInsets를 0으로 설정하는 것은 단순히 내용이 스크롤 뷰 내에서 전혀 채워지지 않음을 의미합니다. 따라서 상단으로 스크롤하면 콘텐츠가 스크롤 뷰의 상단에 바로 배치됩니다. 맨 아래로 스크롤하면 콘텐츠가 스크롤 뷰의 맨 아래에 도달합니다.
Jeremy Wiebe 2013-08-13

그것은 가능한 경우에도 항상 스크롤 위에있는 ScrollView의 (contenInset)에 마린 계속 항상 contentInset를 유지하는 것입니다
Chlebta

87

jball의 대답은 콘텐츠 삽입에 대한 훌륭한 설명이지만 언제 사용 해야하는지에 대한 질문에는 대답하지 않습니다. 그의 다이어그램에서 빌릴 것입니다.

  _|←_cW_→_|_↓_
   |       | 
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
   |content|    
-------------↑-

그것이 당신이 그것을 할 때 얻는 것이지만 그것의 유용성은 스크롤 할 때만 나타납니다.

  _|←_cW_→_|_↓_
   |content| ← content is still visible
---------------
   |content| ↑
 ↑ |content| contentInset.top
cH |content|
 ↓ |content| contentInset.bottom
   |content| ↓
---------------
  _|_______|___ 
             ↑

콘텐츠의 맨 위 행은 여전히 ​​스크롤 뷰의 프레임 안에 있기 때문에 계속 표시됩니다. 상단 오프셋을 생각하는 한 가지 방법은 "맨 위로 스크롤 할 때 스크롤 뷰에서 콘텐츠를 얼마나 아래로 이동시킬 것인가"입니다.

이것이 실제로 사용되는 장소를 보려면 iPhone에 내장 된 사진 앱을보십시오. 탐색 표시 줄과 상태 표시 줄은 투명하며 스크롤보기의 내용은 아래에 표시됩니다. 스크롤 뷰의 프레임이 그렇게 멀리 확장되기 때문입니다. 그러나 콘텐츠 삽입이 아니었다면 맨 위로 갈 때 투명한 탐색 막대를 콘텐츠 맨 위에 지우지 못할 것입니다.


여기서 좋은 점은 삽입을 사용하여 "흐릿한 상태 표시 줄 아래 스크롤"효과를 만들 수 있다는 것입니다.
TheEye 2014

사진 앱에 대한 예는 이해하기 쉬웠습니다.
abhimuralidharan

8

콘텐츠 삽입은 사용자 인터페이스의 다른 부분 아래에 있지만 스크롤 막대를 사용하여 여전히 접근 할 수있는 콘텐츠가있는 문제를 해결합니다. 즉, Content Inset의 목적은 상호 작용 영역을 실제 영역보다 작게 만드는 것입니다.

화면에 세 개의 논리적 영역이있는 경우를 고려하십시오.

TOP BUTTONS

TEXT

BOTTOM TAB BAR

그리고 우리는 TEXT가 TOP BUTTONS 아래에 투명하게 표시되지 않기를 원하지만, Text가 BOTTOM TAB BAR 아래에 나타나기를 원하지만 여전히 스크롤을 허용하여 BOTTOM TAB BAR 아래에있는 텍스트를 투명하게 업데이트 할 수 있습니다.

그런 다음 상단 원점을 상단 버튼 아래로 설정하고 높이는 하단 탭 바의 하단을 포함하도록 설정합니다. 하단 탭 바 콘텐츠 아래에있는 텍스트에 액세스하기 위해 하단 삽입을 하단 탭 바의 높이로 설정합니다.

삽입물이 없으면 스크롤러는 콘텐츠를 입력 할 수있을만큼 스크롤 업할 수 없습니다. 삽입 된 내용은 삽입 된 내용의 크기에 추가 "BLANK CONTENT"가있는 것과 같습니다. 빈 텍스트는 실제 "내용"에 "삽입"되어 있습니다. 이것이 제가 개념을 기억하는 방법입니다.


4

패딩을 추가하는 데 사용됩니다. UIScrollView

없이 contentInset테이블보기는 다음과 같습니다.

여기에 이미지 설명 입력

그런 다음 설정하십시오 contentInset.

tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

효과는 다음과 같습니다.

여기에 이미지 설명 입력

더 나은 것 같죠?

그리고 나는 블로그 를 작성 하여 contentInset, 비판을 환영합니다.


2

좋은 질문입니다.

다음 예제를 고려하십시오 ( scrollerUIScrollView 임).

float offset = 1000;
[super viewDidLoad];
for (int i=0;i<500; i++) {
    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(i * 100, 50, 95, 100)] autorelease];
    [label setText:[NSString stringWithFormat:@"label %d",i]];
    [self.scroller addSubview:label];
    [self.scroller setContentSize:CGSizeMake(self.view.frame.size.width * 2 + offset, 0)];
    [self.scroller setContentInset:UIEdgeInsetsMake(0, -offset, 0, 0)];
}

삽입은 스크롤러가 원하는 콘텐츠에 "창"을 갖도록 강제하는 유일한 방법입니다. 나는 여전히이 샘플 코드를 엉망으로 만들고 있지만 아이디어는있다 : 인세 트를 사용하여 UIScrollView.

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