[TIL/Swift] translatesAutoresizingMaskIntoContrainsts란?
강의를 듣다보니 생성하는 UIView마다 모두 translatesAutoresizingMaskIntoConstraints
프로퍼티를 false로 설정하는 것을 확인했다. 대체 이건 왜 적용하는 걸까?
private func configure() {
textColor = .label
adjustsFontSizeToFitWidth = true
minimumScaleFactor = 0.90
lineBreakMode = .byTruncatingTail
// 정확이 이거 왜 필요한가요?
translatesAutoresizingMaskIntoConstraints = false
}
공식문서 정리
A Boolean value that determines whether the view’s autoresizing mask is translated into Auto Layout constraints.
var translatesAutoresizingMaskIntoConstraints: Bool { get set }
이 Bool 값은 View의 autoresizing mask를 Auto Layout constraints로 바꿀지를 설정하는 값이다.
공식 문서 번역
If this property’s value is true
, the system creates a set of constraints that duplicate the behavior specified by the view’s autoresizing mask.
만약 이 프로퍼티의 값이 true
라면, 시스템은 view의 autoresizing mask에서 지정한대로 동작하는 constraints 셋을 생성한다.
autoresizing mask
An integer bit mask that determines how the receiver resizes itself when its superview’s bounds change.
superview (상위 뷰)의 크기가 변경될 때 하위 view가 어떻게 사이즈를 조정할지 결정짓기 위해 사용된 integer 타입의 bit mask.
This also lets you modify the view’s size and location using the view’s frame
, bounds
, or center
properties, allowing you to create a static, frame-based layout within Auto Layout.
이를 통해 view의 사이즈나 위치를 frame
, bounds
, center
등의 프로퍼티를 이용해 수정할 수 있으며, Auto Layout을 기반으로 static, frame-based layout을 만들 수 있게 해준다.
Note that the autoresizing mask constraints fully specify the view’s size and position; therefore, you cannot add additional constraints to modify this size or position without introducing conflicts.
autoresizing mask constraints는 전적으로 view의 사이즈와 위치를 규정하는 것을 명심해야한다. 따라서, autoresizing mask를 기반으로한 constraints를 사용한다면(이 프로퍼티의 값이 true인 경우) view의 사이즈나 위치를 수정하는 부가적인 constraints를 추가한다면 conflict가 발생할 수 있다.
If you want to use Auto Layout to dynamically calculate the size and position of your view, you must set this property to false
, and then provide a non ambiguous, nonconflicting set of constraints for the view.
만약 동적으로 view의 사이즈나 위치를 계산하기 위해 Auto Layout을 사용하고 싶다면, 해당 프로퍼티를 false
값으로 설정해야한다, 이를 통해 불분명한, 충돌이 발생하지 않는 constraints 셋을 사용할 수 있다.
Auto Layout
관련 문서 (애플 아카이브 문서) [https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html#//apple_ref/doc/uid/TP40010853-CH7-SW1]
By default, the property is set to true
for any view you programmatically create. If you add views in Interface Builder, the system automatically sets this property to false
.
programmatically 생성된 모든 view는 기본값으로 true
값을 가진다. 만약 interface Builder를 통해 view를 추가하는 경우에는 이 프로퍼티를 자동으로 false
값으로 설정한다.
결론
storyboard를 사용하지 않고 programmatic하게 생성한 view의 경우 모두 해당 프로퍼티를 true
값으로 가지게 되는데, 이 값이 true
인 경우에는 우리가 따로 추가적인 constraints를 지정할 수 없다. 따라서 직접 constraints를 설정하기 위해서는 이 값을 false로 바꾸어줘야한다.