누군가 UIScrollView
인스턴스 의 contentInset 속성 이 사용되는 이유를 설명 할 수 있습니까 ? 그리고 예를 들어 줄까요?
답변:
콘텐츠보기와 주변 스크롤보기 사이의 삽입 거리를 설정합니다.
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)
스크롤보기는 콘텐츠보기와 지정된 콘텐츠 삽입에 의해 제공되는 패딩을 포함합니다.
padding
속성 과 유사 합니다.
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에 내장 된 사진 앱을보십시오. 탐색 표시 줄과 상태 표시 줄은 투명하며 스크롤보기의 내용은 아래에 표시됩니다. 스크롤 뷰의 프레임이 그렇게 멀리 확장되기 때문입니다. 그러나 콘텐츠 삽입이 아니었다면 맨 위로 갈 때 투명한 탐색 막대를 콘텐츠 맨 위에 지우지 못할 것입니다.
콘텐츠 삽입은 사용자 인터페이스의 다른 부분 아래에 있지만 스크롤 막대를 사용하여 여전히 접근 할 수있는 콘텐츠가있는 문제를 해결합니다. 즉, Content Inset의 목적은 상호 작용 영역을 실제 영역보다 작게 만드는 것입니다.
화면에 세 개의 논리적 영역이있는 경우를 고려하십시오.
TOP BUTTONS
TEXT
BOTTOM TAB BAR
그리고 우리는 TEXT가 TOP BUTTONS 아래에 투명하게 표시되지 않기를 원하지만, Text가 BOTTOM TAB BAR 아래에 나타나기를 원하지만 여전히 스크롤을 허용하여 BOTTOM TAB BAR 아래에있는 텍스트를 투명하게 업데이트 할 수 있습니다.
그런 다음 상단 원점을 상단 버튼 아래로 설정하고 높이는 하단 탭 바의 하단을 포함하도록 설정합니다. 하단 탭 바 콘텐츠 아래에있는 텍스트에 액세스하기 위해 하단 삽입을 하단 탭 바의 높이로 설정합니다.
삽입물이 없으면 스크롤러는 콘텐츠를 입력 할 수있을만큼 스크롤 업할 수 없습니다. 삽입 된 내용은 삽입 된 내용의 크기에 추가 "BLANK CONTENT"가있는 것과 같습니다. 빈 텍스트는 실제 "내용"에 "삽입"되어 있습니다. 이것이 제가 개념을 기억하는 방법입니다.
좋은 질문입니다.
다음 예제를 고려하십시오 ( scroller
UIScrollView 임).
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
.