[Swift] flexLayout / pinLayout

팔랑이·2024년 11월 21일
0

iOS/Swift

목록 보기
62/71

FlexLayout과 PinLayout

  • AutoLayout / SnapKit에 비해 훨씬 빠르고 구조적이다
  • 빠른 이유: 제약조건 기반 레이아웃이 아닌, frame 기반 레이아웃
  • 코드 기반 UI 구성에서 선언적이고 명확한 구조 파악이 가능하다

frame 기반 레이아웃?

  • AutoLayout은 제약 조건을 해석하고 해결하는 계산 비용이 크다
  • PinLayout은 기기의 실제 frame 값을 기준으로 좌표와 크기를 즉시 계산한다
  • 즉시 계산되고 바로 적용되므로 반복 뷰나 애니메이션에서 성능이 좋다

FlexLayout

  • UIStackView처럼 내부 아이템을 쌓아 올리는 구조를 담당한다 (UIStackView 대체)
  • .direction, .justifyContent, .alignItems, .wrap 등 CSS의 flexbox 개념과 매우 유사함
  • 뷰 계층의 흐름을 선언적으로 표현할 수 있어 시각적이고 구조적인 코드 작성 가능
  • 내부 아이템을 반복적으로 추가하거나 키워드 컬렉션처럼 유동적인 뷰에 특히 강하다

PinLayout

  • SnapKit처럼 뷰의 위치와 크기를 지정하지만, AutoLayout이 아닌 frame 기반으로 작동한다
  • .top(), .left(), .below(of:), .size(100) 등으로 뷰의 위치와 사이즈를 명령형으로 직접 지정한다
  • 레이아웃 계산이 즉시 일어나기 때문에 매우 빠르고 디버깅이 단순하다
  • Flex로 쌓은 container를 화면의 어디에 위치시킬지 제어할 때 적합하다

👉🏻 선언형 vs 명령형 레이아웃

  • 선언형(FlexLayout): 무엇을 만들고 싶은지 설명 → 엔진이 알아서 배치
  • 명령형(PinLayout): 어떻게 만들지를 수치로 직접 지시
  • 선언형은 구조를 명확히 표현하기 좋고, 명령형은 세밀한 제어와 퍼포먼스에 강하다

FlexLayout + PinLayout 조합의 기본 패턴

  • FlexLayout은 내부에서 아이템을 "어떻게 쌓을지" 선언한다
  • PinLayout은 그 Flex container를 "어디에 위치시킬지" 지정한다
  • ex) 키워드 뷰를 Flex로 감싸고, 그 뷰를 화면 중간에 Pin으로 배치

퍼피팅 화면을 예로 들자면,
하늘색 뷰들을 콘테이너뷰처럼 생각하고 flexlayout으로 쌓고, 빨간 영역 안에서 pinlayout으로 저 flexlayout 콘테이너 뷰들의 위치를 잡아주면 된다.

결론

  • FlexLayout은 구조를 선언적으로 짜기 위한 도구
  • PinLayout은 그 구조를 위치시키는 도구
  • 반복, 유동적인 UI에는 Flex가, 위치 지정과 애니메이션에는 Pin이 유리
  • 두 개를 함께 쓰면 코드 기반 UI에서 성능과 생산성을 모두 잡을 수 있다!
profile
정체되지 않는 성장

0개의 댓글