티스토리 뷰

iOS

UIView의 Intrinsic Content Size 설정하기

꿀벌의달콤한여행 2021. 4. 5. 22:56

Intrinsic content size란 자신의 content size에 따라서 결정되는 뷰 사이즈를 말한다.

 

뷰 내뷰의 컨텐츠에 따라서 자신의 사이즈를 잡는 label, button 등은 intrinsic content size가 있어서 자신의 height, width를 알고 있다.
그래서 좌상단에 top, leading constraint만 줘도 잘 붙는다.

 

UIView는 위와 같은 조건의 constraint를 주면 width, height를 모르겠다고 뜬다.

 

size inspector에서 Intrinsic size의 place holder를 만들어두면 임시로 크기를 정할 수 있는데, 이거는 인터페이스 빌더에서 임시로 적용되는 거고 런타임에는 적용되지 않는다.

 

그래서 UIView의 Intrinsic Size를 정해주려면, UIView를 상속받는 커스텀 클래스를 만들어서 @IBDesignable 어노테이션을 붙여주면 된다. -> @IBDesignable은 스토리보드에서 렌더링되도록 하는 어노테이션. UIView의 intrinsic size를 설정하기 위해선 intrinsicContentSize를 상속받아서 연산 프로퍼티로 구현해주기만 하면 된다.

import UIKit

@IBDesignable
class MyView: UIView {

// 프로퍼티 상속이니 무조건 연산 프로퍼티로
    override var intrinsicContentSize: CGSize {
        return CGSize(width: 50, height: 50)
    }
}

이렇게 하고 MyView로 커스텀클래스 지정을 UIView에다 하면 intrinsic size를 정해줄 수 있다. 그러면 이제 label처럼 x, y position만 정해줘도 빨간색 없이 잘 적용된다.

댓글