iOS/SwiftUI

[SwiftUI] SwiftUI의 Stack, Frame, GeometryReader

2022. 11. 30. 00:45
목차
  1. 컨테이너의 자식 뷰 제한
  2. 텍스트 줄 제한과 레이아웃 우선순위
  3. SwiftUI 프레임
  4. frame과 GeometryReader

귀신같이 일주일만에 돌아온 블로그 ㅋㅋ

오늘은 SwiftUI에서 필수로 쓰이는 스택과 프레임, 그리고 GeometryReader라는 것을

정리해볼 것이다람쥐 !! 🐿️

 


 

컨테이너의 자식 뷰 제한

 컨테이너 뷰는 직접적인 하위 뷰를 10개로 제한한다. 만약 스택 컨테이너가 10개 이상의 자식 뷰를 담으면 다음과 같은 구문 오류가 표시된다.

Argument passed to call that takes no argument

 만약 스택에 포함된 직접적인 자식 뷰가 10개를 넘어야 한다면 뷰들은 여러 컨테이너로 나눠서 담겨야 할 것이다. 이때 사용할 수 있는 방법은 2가지다.

  1. 하위 뷰로 스택을 추가하기
  2. Group 뷰 사용하기

아래 코드는 12개의 Text 뷰가 Group 컨테이너로 나눠져서 VStack에는 단 2개의 직접적인 자식 뷰만 포함하게 한다.

VStack {
    Group {
    	Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
    }
    
    Group {
    	Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
        Text("Sample Text")
    }
}

 이것은 10개의 하위 뷰 제한을 피하게 할 뿐만 아니라, Group은 여러 뷰에서 작업을 수행할 때에도 유용하다. 예를 들어, Group 뷰들을 포함시키고 숨기는 명령을 주면 하나의 명령으로 모든 뷰를 숨길 수 있다.

 

텍스트 줄 제한과 레이아웃 우선순위

📍 텍스트 줄 제한

  • lineLimit 수정자
    • 예) .lineLimit(1)

📍 레이아웃 우선순위

  • layoutPriority 수정자
    • 예) .layoutPriority(1)

 

SwiftUI 프레임

 Default로, 뷰는 자신의 콘텐트와 자신이 속한 레이아웃에 따라 자동으로 크기가 조절된다. 대부분은 뷰의 크기와 위치는 스택 레이아웃을 사용하여 조절할 수 있지만. 때로는 뷰 자체가 특정 크기나 영역에 맞아야 하기도 한다. 이를 위해 SwiftUI는 조절 가능한 frame 수정자를 제공한다. 사용 예는 아래와 같다.

.frame(minWidth: 100, maxWidth: 300, minHeight: 100, maxHeight: 100, alignment: .center)

 

frame과 GeometryReader

 프레임은 뷰들을 담고 있는 컨테이너의 크기에 따라 조절되도록 구현할 수도 있다. 이 작업은 GeometryReader로 뷰를 감싸고 컨테이너의 크기를 식별하기 위한 리더(reader)를 이용하여 할 수 있다. 이 리더는 프레임의 크기를 계산하는 데 사용된다. 다음의 예제는 두 개의 Text 뷰를 포함하고 있는 VStack의 크기를 기준으로 Text 뷰의 크기를 설정한다.

GeometryReader { geometry in
    VStack {
    	Text("Hello World, how are you?")
            .font(.largeTitle)
            .frame(width: geometry.size.width / 2, height: (geometry.size.width / 4) * 3)
        Text("Goodbye World")
            .font(.largeTitle)
            .frame(width: geometry.size.width / 3, height: geometry.size.width / 4)
    }
}

상단에 있는 Text 뷰는 VStack의 1/2의 폭과 3/4의 높이를 차지하고, 하단에 있는 Text 뷰는 VStack의 1/3의 폭과 1/4의 높이를 차지하기 위한 설정이다.

 


 

멋사 앱스쿨에서 돌림판을 만들 때 GeometryReader를 사용했었는데,

이렇게 개념을 잡고 가니 다음에 필요할 때가 생기면 까먹지 않고 응용할 수 있을 것 같다.

 

 

 

출처 : Swift 기반의 iOS 프로그래밍

'iOS > SwiftUI' 카테고리의 다른 글

[SwiftUI] UserDefaults와 @AppStorage  (0) 2023.02.04
[SwiftUI] SwiftUI와 Firebase를 이용한 사용자 계정 관리 (회원가입)  (1) 2022.12.18
[SwiftUI] SwiftUI로 커스텀 뷰 수정하기  (0) 2022.11.22
[SwiftUI] SwiftUI로 커스텀 뷰 생성하기  (0) 2022.11.14
[SwiftUI] Xcode 파일 뜯어보기  (0) 2022.11.06
  1. 컨테이너의 자식 뷰 제한
  2. 텍스트 줄 제한과 레이아웃 우선순위
  3. SwiftUI 프레임
  4. frame과 GeometryReader
'iOS/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] UserDefaults와 @AppStorage
  • [SwiftUI] SwiftUI와 Firebase를 이용한 사용자 계정 관리 (회원가입)
  • [SwiftUI] SwiftUI로 커스텀 뷰 수정하기
  • [SwiftUI] SwiftUI로 커스텀 뷰 생성하기
릴 루
릴 루
릴 루
RIRU
릴 루
전체
오늘
어제
  • 분류 전체보기 (13)
    • 개발환경 (1)
    • iOS (9)
      • SwiftUI (6)
      • Combine (3)
      • UIKit (0)
    • Algorithm (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • hybrid
  • SwiftUI
  • subject
  • userDefaults
  • Firebase
  • xcode
  • AppStorage
  • DFS
  • native
  • swift
  • 백트래킹
  • ios
  • Web App
  • SwiftUI 기반의 iOS 프로그래밍
  • 알고리즘
  • combine
  • 브루트포스
  • First Tistory
  • Swift 기반의 iOS 프로그래밍
  • DP

최근 댓글

최근 글

hELLO · Designed By 정상우.
릴 루
[SwiftUI] SwiftUI의 Stack, Frame, GeometryReader
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.