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 | 31 |
Tags
- RxCocoa
- ios
- uitableview
- swiftUI
- ribs
- MVVM
- clean architecture
- uiscrollview
- UITextView
- Refactoring
- collectionview
- UICollectionView
- HIG
- 리팩토링
- 리펙토링
- rxswift
- Xcode
- Observable
- combine
- Clean Code
- 애니메이션
- 클린 코드
- 리펙터링
- swift documentation
- tableView
- map
- Protocol
- Human interface guide
- 스위프트
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] sizeToFit vs sizeThatFits 개념 본문
sizeToFit() 개념
- subview들을 감싸는 알맞은 크기로 view를 리사이징하는 하는 것
- 알맞은 크기: 뷰가 가지고 있는 subview들의 콘텐츠 사이즈를 딱 채운 크기 (UILabel같은 경우 text를 감싼 크기이고, UIImageView에서는 image를 감싼 크기를 의미)
- 여기서의 알맞은 크기는 아래에서 알아볼 sizeThatFits에서 리턴되는 값을 사용함
- 주의 사항)
- 뷰가 기본적으로 가지고 있는 사이즈로 sizeToFit()되게 하고 싶지 않다면 이 메서드를 오버라이드 하면 안되고 아래에서 볼 sizeThatFits를 사용할 것
sizeThatFits 개념
- 위에서 알아본 알맞은 크기
- sizeThatFits를 사용하면 뷰가 가지고 있는 subview들의 콘텐츠 사이즈를 딱 채운 크기를 반환해줌
- 이 메서드를 오버라이딩하면 이 오버라이딩 한 결과값이 sizeToFit()에도 영향
sizeToFit과 sizeThatFits 차이?
- sizeToFit은 sizeThatFits의 결과값을 활용하여 뷰를 업데이트 시키고, sizeThatFits는 단순히 계산하여 값만 리턴
- sizeToFit을 호출하면 뷰의 크기가 실시간으로 fitting됨
- sizeThatFits을 호출하면 뷰의 크기에는 영향을 미치지 않고 단순히 값만 리턴됨
- 단순히 뷰의 크기를 가져와서 이 값을 사용하고 싶으면 sizeThatFits를 호출할 것 (만약 sizeToFit을 호출하면 뷰의 실시간 크기가 업데이트 되며 다른 중요한 main thread작업이 딜레이 되고 값비싼 호출이 될 것)
ex) 뷰가 화면에 그려지기 전에 view의 크기를 알아와야 하는 경우?
// bad case
someView.sizeToFit()
let someViewSize = someView.frame
// good case
let someViewSize = someView.sizeThatFits(someView.frame)
- 또 sizeThatFits는 오버라이드가 가능하여 뷰의 크기에 관한 여러 커스텀이 가능
- ex) UILabel을 사용할 때 inset값이 상하좌우로 20씩 들어가게끔 하고 싶은 경우 contentInset을 사용해도 되지만 UILabel 서브클래싱에서 sizeThatFits를 오버라이드하여 width, height 각각 40씩 더하기
class InsetLabel: UILabel {
override func sizeThatFits(_ size: CGSize) -> CGSize {
let sizeThatFits = super.sizeThatFits(size)
return CGSize(width: sizeThatFits.width + 40, height: self.frame.height + 40)
}
}
* 참고
- https://developer.apple.com/documentation/uikit/uiview/1622630-sizetofit#discussion
- https://developer.apple.com/documentation/uikit/uiview/1622625-sizethatfits
'iOS 응용 (swift)' 카테고리의 다른 글
Comments