iOS/SwiftUI5 [SwiftUI] SwiftUI 레이아웃은 어떻게 동작하는가 UIKit에서는 frame을 직접 지정하거나 Auto Layout 제약을 걸어서 뷰의 크기와 위치를 결정했다.SwiftUI는 다르다. 개발자가 크기를 직접 명령하는 대신, 부모와 자식이 협상해서 레이아웃을 결정한다.이 글에서는 SwiftUI 레이아웃의 3단계 프로세스와, 뷰가 크기를 결정하는 두 가지 성질인 Hugging과 Expanding을 정리한다. 레이아웃 프로세스SwiftUI의 레이아웃은 부모 → 자식 → 부모 순서로 진행된다.1. 부모가 제안 (Propose)2. 자식이 결정 (Choose) 3. 부모가 배치 (Place)1단계. 부모가 자식에게 "제안 크기"를 제공한다부모 뷰는 자식 뷰에게 "너는 이 크기 안에 들어올 수 있어"라고 제안한다.중요한 건 이게 강제가 아닌 제안(Proposal).. 2026. 3. 6. [SwiftUI] SwiftUI의 뷰는 왜 struct이고, some View란? SwiftUI를 처음 시작하면 자동으로 생성되는 코드가 있다.struct ContentView: View { var body: some View { Text("Hello, world!") }}익숙해서 그냥 넘기기 쉽지만, 이 코드 안에는 SwiftUI의 핵심 철학이 담겨 있다.struct를 왜 쓰는지, View 프로토콜은 왜 채택하는지, var body는 무슨 의미인지, 그리고 some은 뭔지 한 줄씩 뜯어보자. 1. 왜 class가 아닌 struct인가?UIKit에서는 뷰를 UIView를 상속한 class로 만들었다. 그런데 SwiftUI는 왜 struct를 택했을까?값 타입 vs 참조 타입struct는 값 타입(Value Type)이다. 복사하면 완전히 독립된 복사본이 생긴다... 2026. 3. 6. [SwiftUI] CGFloat, CGPoint, CGSize, CGRect SwiftUI에서 레이아웃과 그래픽 작업을 할 때 사용되는 핵심 데이터 타입들이다.1차원 벡터CGFloat정의: Core Graphics에서 사용하는 부동 소수점 타입용도: 길이, 두께, 각도 등 단일 수치를 나타낼 때 사용특징: 플랫폼에 따라 크기가 다를 수 있음 (64비트 환경에서는 Double과 같고, 32비트 환경에서는 Float과 같음)예시:let width: CGFloat = 100.0let opacity: CGFloat = 0.5let cornerRadius: CGFloat = 8.0Double정의: Swift 표준 라이브러리의 부동 소수점 타입용도: 일반적인 계산이나 값 저장에 사용특징: 항상 64비트 정밀도를 가짐예시:let distance: Double = 42.1952차원 벡터CGPo.. 2024. 1. 31. [SwiftUI] SwiftUI의 View란? https://developer.apple.com/documentation/swiftui/view View | Apple Developer DocumentationA type that represents part of your app’s user interface and provides modifiers that you use to configure views.developer.apple.com1. SwiftUI View란?앱 사용자 인터페이스의 일부를 나타내고 뷰를 구성하는 데 사용하는 수정자를 제공하는 유형뷰는 프로토콜, UI의 한 부분을 나타냄. 다양한 모디파이어를 통해 해당 뷰의 속성을 변경하고 조정할 수 있음뷰는 연관 타입으로 자기 자신을 바디로 칭함뷰는 ViewBuider와 MainActor .. 2024. 1. 30. [SwiftUI] SwiftUI 기본 컴포넌트 정리 [ref] https://www.inflearn.com/course/%ED%95%9C%EC%A1%B0%EA%B0%81-swiftui-%EC%9E%85%EB%AC%B8 [무료] 한 조각씩 배우는 SwiftUI - 입문편 - 인프런 | 강의처음부터 끝까지 어렵게 공부해서 앱을 만들지 마세요! SwiftUI, 필요할 때마다 한 조각씩 꺼내 드세요!, - 강의 소개 | 인프런www.inflearn.comButton//component 연습 - ButtonButton { print("Hitted2") } label: { Text("HitMe2!!") .padding() .frame(width: 150) .. 2023. 3. 24. 이전 1 다음