[Swift/코드한줄] translatesAutoresizingMaskIntoConstraints = false

하루에 코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.


 

우리가 코드를 이용해 layout을 잡기 전 꼭 해주는 일이 있다

바로 button.translatesAutoresizingMaskIntoConstraints = false

처럼 translatesAutoresizingMaskIntoConstraints 를 false로 설정해주는 일이다

이 코드를 설정하지 않으면 위치가 원하는 데로 잡히지 않는다

왜일지 궁금해졌다

먼저 translatesAutoresizingMaskIntoConstraints 은 UIView Class 에서 Subviews의 Layout 관련 Property로 분류가 되어있는 것을 볼 수 있다

그리고 공식 문서의 정의를 확인해보면

View의 AutoresizingMask가 AutoLayout Constraints으로 변환되는지의 Bool값

이라고 작성되어 있다

흠.. 그러면 AutoresizingMask가 뭔데?

또 공식 문서를 확인해보면, SuperView의 bounds가 변경될 때 그 안에 있는 subView의 크기를 어떻게 재설정해줄 것인가에 대한 bit mask 라고 한다

superView의 위치가 변경되면 subView들은 superView에 상대적으로 완전한 위치/크기가 잡혀있기 때문에 함께 재설정을 해줘야겠지요..?

근데 ! 나는 ! 자동으로 설정 안 되면 좋겠고 ! 내가 새로 잡은 위치로 개체가 움직이면 좋겠어

기존의 잡아놨던 layout을 위해 상대적으로 이제 그만 움직여줬으면 좋겠어 !

그쵸 !!? 그렇기 때문에 우리는 AutoresizingMask가 잡히지 않아줬으면 하기 때문에 translatesAutoresizingMaskIntoConstraints 값을 false로 설정해줘야 한다~~ ^-^

 

그리고 translatesAutoresizingMaskIntoConstraints = true 시에는 UIView의 크기, 위치가 완전히 지정되어 있는 상태이기 때문에

false로 변경 후 AutoLayout을 잡아줄 때는 완전한 제약조건을 제시해야 한다 ~

아니면 내가 원하는 대로 움직이지 않을지도...!?

 

참고로 Code Base로 개체 생성 시에는 translatesAutoresizingMaskIntoConstraints 기본 값이 true로 설정되어 있고,

Interface Builder(Storyboard, Xib ..) 로 생성 시에는 translatesAutoresizingMaskIntoConstraints가 false로 설정되어 있다고 한다

스토리보드로 만들어도 맨날 false로 코드 선언해주고 시작했는데 ㅎㅎ 안 그랬어도 됐었네요..

 

휴.. 항상 그냥 AutoLayout 잡을 때는 저거 false로 하고 시작해야 해 ~ 라는 단순한 생각에서

개념을 보고 이해를 하니깐 좋다.. ㅎㅎ

 

2022년 1월 6일 코드한줄🍎 끗 -_-

 

Apple Developer Documentation

 

developer.apple.com