TIL - 2021.03.31 (Wed)
3월의 마지막...🌸 TIL KeyWords
- AutoLayout
빠르고 간단하게 정리
AutoLayout ?? 무엇인가?
- 크기가 제각각인 iOS 기기들에 화면을 맞추기 위해, 사용자가 화면을 동적으로 조절하는 등의 외부적인 조건(split View, 가로 세로 모드 변경)에 맞추기 위해 조절하는 설정!
Constraints를 이용해서 View의 위치와 크기를 지정해주는 것이다!!
constraints
- 제약은 수학 수식 처럼 나타내서 뷰에게 걸어줄 수 있다

단순하게 1차 함수를 생각해주면 이해가 빠를 것 같다
- Attributes : View의 Constraint를 걸어줄 때 사용하는 속성(?), View의 크기(Width, Height)와 위치(Top, Bottom, Leading, Trailing, CenterX, CenterY, Baseline, Not An Attribute)를 지정할 때 필요한 속성이다, 단어가 직관적이라 그대로 받아들이면 될 것 같다

그러면 이러한 Attributes를 사용해서 수식을 작성할 때 어떤 식으로 하면 좋을까?
여기에도 규칙이 있다
- You cannot constrain a size attribute to a location attribute (위치 제한과 크기 제한을 같이 작성 못한다)
- You cannot assign constraint values to location attributes (위치 제한에는 상수를 할당할 수 없다)
- You cannot use a nonidentity multiplier (a value other than 1.0) with location attributes.(
- For location attributes, you cannot constrain vertical attributes to horizontal attributes (수직과 수평 제한은 서로 할당될 수 없다)
- For location attributes, you cannot constrain Leading or Trailing attributes to Left or Right attributes.
- Equality는 할당이 아니고 등호로 생각하고 이해해라
Creating Nonambiguous, Satisfiable Layouts
Constraint를 부여할 때는 위치, 크기를 정확히 줘야된다. 가로 크기, 세로 크기, x축, y축 모두 다 적절하게 줘야지 정확한 AutoLayout을 줄 수 있다

강의를 통해 정답 알기 전 미리 Constraint 생각해보기
- Bottom, Top 거리 상수로 제한 세로 크기(빨강, 파랑)
- 빨강 Leading 상수로 거리 제한, 파랑 Trailing 상수로 거리 제한, 빨강 Trailing와 파랑 Leading 상수로 거리 제한
- 빨강 파랑 가로 크기 동일 제한
혹은 빨강과 파랑에 관계를 걸어주는 방법이 아닌 파랑도 따로 거리 제한을 걸어주어도 된다
AutoLayout에는 정답이 없다... 방법이 엄청 많다!
내가 설정한 Constraint 사이에 역설적인 것, 서로 충돌하는 것이 없는지 잘 살펴보자!
만약 서로 부딪히는 Constraint가 있다? 그럼 우선도를 지정해 주면된다
Intrinsic Content Size (고유 컨텐츠 사이즈)
ex) 안에 들어올 글자의 크기에 따라 뷰의 크기를 다르게 해줄 수 있음
⇒ Labels, Buttons, switches, and text fields 의 경우 딱히 제약으로 높이와 넓이를 지정하지 않아도 스스로 예측해서 크기와 높이를 지정한다. 위치만 잡아주면 된다
import UIKit
@IBDesignable
class MyView: UIView {
override var intrinsicContentSize: CGSize {
return CGSize(width: 50, height: 50)
}
}

CRCH
Content compression = Content 사이즈에 맞게 버티려고 하는 힘
Content hugging = Content 사이즈에 맞게 딱 맞게 해주려고 하는 힘

1번 Label = hugging Priority(1000) , compression Priority(250)
2번 Label = hugging Priority(750), compression Priority(750)
3번 Label = hugging Priority(250), compression Priority(1000)

안에 content의 크기가 커질때는 compression priority의 영향력이 커져서 다음과 같이 3번이 커진다

storyboard 밑에 옵션을 통한 constraint 설정
- Alignment : Leading, Trailing, Top, Bottom 을 기준으로 정렬, 수직, 수평 중앙 정렬
- Equal Width, Height, Aspect Ratio
- Clear Constraint
StackView를 통한 AutoLayout 설정
- axis(축) : UIStackView는 어느 방향으로 View들을 쌓을 것인지 설정
- orientation : NSStackView가 어느 방향으로 View들을 쌓을 것인지 설정
- distribution : 축에 따라 view의 layout을 정의
- fill, fillEqually, fillProportionally, equalSpacing
- alignment : StackView 축의 수직인 뷰의 레이아웃을 정의
- fill, leading, top, firstBaseline, center, trailing, bottom, lastBaseline
- spacing: StackView 내의 뷰들의 간격을 정의
Author And Source
이 문제에 관하여(TIL - 2021.03.31 (Wed)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@leeyoungwoozz/TIL-2021.03.31-Thu저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)