하루에 코드 한 줄에 대해 기록합니다. 의식의 흐름을 따라갑니다.
우리가 코드를 이용해 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일 코드한줄🍎 끗 -_-
'Develop > Swift' 카테고리의 다른 글
[Swift/코드한줄] Print 문 프로퍼티 - separator, terminator (0) | 2022.05.06 |
---|---|
[Swift/코드한줄] Timer.invalidate() (0) | 2022.04.08 |
[Swift] WWDC21 Get ready for iCloud Private Relay (0) | 2021.12.21 |
[Swift] WWDC21 Explore Nearby Interaction with third-party accessories (2) | 2021.09.14 |
[Swift] UIButton 코드로 직접 구현하기 (Create UIButton programmatically in Swift ) (0) | 2021.03.30 |
Comment