IntrinsicContentSize를 이용한 Dynamic Height
IntrinsicContentSize 란 ?
-
애플 도큐먼트를 보면 '뷰 자체의 본질적 크기' 라고 나와 있다.
-
Label 혹은 Button 레이아웃을 잡을 때 width 나 height를 따로 설정해주지 않아도 알아서 레이아웃이 잡혀 나오는 이유가 바로 IntrinsicContentSize를 가지고 있기 때문이라고 한다.
-
View를 Custom하게될 경우 이미 정해진 IntrinsicContentSize와 다르게 size를 갱신시켜야 하기 때문에, invalidateIntrinsicContentSize() 메서드를 통해 커스텀된 뷰에 따라 레이아웃이 바뀌도록 해야 한다.
DynamicHeight CollectionView
셀의 크기나 셀의 개수에 따라 셀을 포함하고 있는 CollectionView의 Height을 동적으로 대응하기 위한 코드
class DynamicHeightCollectionView: UICollectionView {
override func layoutSubviews() {
super.layoutSubviews()
if !__CGSizeEqualToSize(bounds.size, self.intrinsicContentSize) {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
return contentSize
}
}
layoutSubviews() 가 호출되는 시점 : reloadData() 발생 후 cell의 개수를 결정하고, dequeueReusableCell를 통해 보여질 cell를 모두 생성한 뒤 호출됨
-> 즉 얼만큼 CollectionView의 height가 동적으로 대응되어야할지 정해진 후 !
layoutSubviews()를 오버라이딩 하면 cell이 모두 결정된 후 collectionView height을 어떻게 조절해줄 것인지 정할 수 있겠죠 ?
cell을 통해 정해진 collectionView bounds size와 intrinsicContentSize를 비교하여 둘이 다를 경우 invalidateIntrinsicContentSize()를 통해 달라진 사이즈를 갱신시킵니다!
어떤 사이즈로 갱신시킬 것인지 intrinsicContentSize를 오버라이딩 하여 길어진 contentSize를 리턴하면, 동적으로 높이를 변경할 수 있습니다.
Author And Source
이 문제에 관하여(IntrinsicContentSize를 이용한 Dynamic Height), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gaebokchi/IntrinsicContentSize를-이용한-Dynamic-Height저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)