Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MVVM
- UICollectionView
- uiscrollview
- clean architecture
- HIG
- ribs
- 리펙토링
- UITextView
- Clean Code
- 애니메이션
- 클린 코드
- 리펙터링
- Human interface guide
- Protocol
- 리팩토링
- Observable
- combine
- tableView
- SWIFT
- rxswift
- uitableview
- 스위프트
- swift documentation
- Xcode
- ios
- collectionview
- RxCocoa
- map
- swiftUI
- Refactoring
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] UIScrollView의 contentInset, contentInsetAdjustmentBehavior, adjustedContentInset 사용 방법 (UIScrollView 인셋, 마진) 본문
iOS 응용 (swift)
[iOS - swift] UIScrollView의 contentInset, contentInsetAdjustmentBehavior, adjustedContentInset 사용 방법 (UIScrollView 인셋, 마진)
jake-kim 2023. 2. 5. 23:07* 예제에 사용된 UIScrollView+UIStackView 사용한 베이스 코드는 이전 포스팅 글(UIScrollView+UIStackView 구현) 참고
(only code: https://github.com/JK0369/ExScrollView_UIStackView)
- 예제에 앞서, UIScrollView의 background 색상을 blue, UIStackView를 green로 설정
ContentInset
- 스크롤 가장자리로 부터 contentView와의 거리 값
- 핵심은 inset을 주면 그만큼 UIScrollView의 content 크기도 증가
- 만약 contentInset값을 top 120을 주게된다면?
- 120만큼 content의 top으로부터 edge까지 거리가 부여되며, 이 거리만큼 content 사이즈도 증가
scrollView.contentInset = .init(top: 120, left: 0, bottom: 0, right: 0)
- 만약 left 20을 주면?
- 20만큼 너비가 증가되어 양옆으로 스크롤이 가능
scrollView.contentInset = .init(top: 120, left: 30, bottom: 0, right: 0)
contentInsetAdjustedmentBehavior
- safeArea를 고려하여 자동으로 contentOffset을 조절해주는 프로퍼티
- 4가지의 케이스로 존재
extension UIScrollView {
@available(iOS 11.0, *)
public enum ContentInsetAdjustmentBehavior {
case automatic = 0
case scrollableAxes = 1
case never = 2
case always = 3
}
}
- 1) automatic: scrollView의 safe area를 고려하여 scrollView의 contentOffset을 자동으로 조정
- (디폴트 값)
- 스크롤 뷰의 contentOffset.y값이 상단의 safeArea를 고려하여, -값으로 시작
- contentOffset 크기의 기준은 컨텐츠가 줄어드는 쪽으로 스크롤 되는 경우 음수
scrollView.contentInsetAdjustmentBehavior = .automatic
- 2) scrollableAxes: 스크롤 방향으로만 safeArea inset 적용
- scroll 방향이 vertical이므로, top, bottom의 safe area만 고려된 형태 (아이폰을 회전하면 leading, trailing에 inset 고려가 안되어 쭉 늘어난 상태)
scrollView.contentInsetAdjustmentBehavior = .scrollableAxes
- 3). never: safeArea inset 고려 x
scrollView.contentInsetAdjustmentBehavior = .never
- 4). always: 항상 safeArea를 고려하여 contentOffset 적용
scrollView.contentInsetAdjustmentBehavior = .always
adjustedContentInset
- read only property
- contentOffset의 크기를 의미
- contentOffset.y의 top이 -59이면 아래와 같은 화면이고 이 때의 adjustedContentInset의 top값은 59
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentInset = .init(top: 120, left: 30, bottom: 0, right: 0)
scrollView.contentInsetAdjustmentBehavior = .always
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
print(scrollView.contentOffset) // (-30.0, -179.0)
print(scrollView.adjustedContentInset) // UIEdgeInsets(top: 179.0, left: 30.0, bottom: 34.0, right: 0.0)
}
}
* 전체 코드: https://github.com/JK0369/ExScrollViewInsets
* 참고
https://developer.apple.com/documentation/uikit/uiscrollview/contentinsetadjustmentbehavior
https://developer.apple.com/documentation/uikit/uiscrollview/1619406-contentinset
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] BottomSheet 구현 방법 (바텀 시트, FloatingPanel 프레임워크 사용) (2) | 2023.02.07 |
---|---|
[iOS - swift] RxSwift의 Observable, Single, Completable 구분하여 사용하기 (0) | 2023.02.06 |
[iOS - Swift] UIScrollView와 UIStackView로 UITableView처럼 만드는 방법 (Storyboard) (0) | 2023.02.04 |
[iOS - swift] LLDB (Low Level Debugger) 디버깅 방법 (0) | 2023.01.30 |
[iOS - swift] 3. UI 성능 분석 - Commit Hitch를 줄이는 UI 성능 최적화 프로그래밍 (0) | 2023.01.29 |
Comments