- 본질적인 컨텐츠 크기
- 대부분의 view들은 기본적으로 컨텐츠 크기만큼의 size를 가지고 있음
- UILabel이나 UIButton을 auto layout으로 구현할때 제약사항으로 width와 height를 추가하지 않아도 오류가 나지 않는 이유는 intrinsicContentSize를 가지고 있기 때문
- 이렇게 Intrinsic Content Size를 가지는 대표적인 것들은 다음과 같음
Intrinsic Contet Size Width | Intrinsic Contet Size Height | |
---|---|---|
UIView | X | X |
UISlider | O | X |
UILabel, UIButton, UISwitch, UITextField | O | O |
TextView, ImageView | Content에 따라 변화함 |
- view의 컨텐츠 크기가 바뀌었을때
intrinsicContentSize
프로퍼티를 통해 size를 갱신하고 그에 맞게 auto layout이 업데이트 되도록 만들어주는 메소드 - 즉 view의 content 크기가 바뀔때 invalidateIntrinsicContentSize 를 호출하면 intrinsicContentSize 값이 새로 계산되어 적용 됨
- apple에서 제공해주는 view는 내부적으로 적용되어 있음
- custom view를 구현할때는 intrinsicContentSize 프로퍼티와 더불어 invalidateIntrinsicContentSize() 메소드 구현 필요
public var point: CGFloat = 0 {
didSet {
self.currentWidth = getRateToWidth(self.current)
self.maxWidth = getRateToWidth(CGFloat(self.max))
// view의 컨텐츠 크기가 바뀔때 invalidateIntrinsicContentSize() 메소드를 실행
invalidateIntrinsicContentSize()
}
}
public override var intrinsicContentSize: CGSize {
let count = CGFloat(self.max)
var width = self.point * count
width = width + CGFloat(count - 1) * self.spacing
return CGSize(width: width, height: self.point)
}