일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- @Environment
- subject
- nestjs
- Operators
- IOS
- ios14
- typeorm
- operator
- @EnvironmentObject
- nonisolated
- swift6
- vim
- RxSwift
- Operater
- @Binding
- SWIFT
- RxCocoa
- Xcode
- dismiss
- @State
- init
- SwiftUI
- URL(string:)
- Bug
- graphql
- init?
- NullObject
- NavigationLink
- Creating Operators
- RFC1738/1808
- Today
- Total
Tunko Development Diary
SwiftUI) 알아두면 편한 FixedSize! 본문
https://developer.apple.com/documentation/swiftui/view/fixedsize()
FixedSize를 한마디로 정리하자면 가장 이상적인 뷰의 크기로 적용하는 수정자 입니다.
이상적인 뷰의 크기라고 하니 잘 이해가 가지 않습니다…
우선 아래 테스트 예시를 봐주세요.
FixedSize 사용전
struct FixedSizeView: View {
var body: some View {
VStack {
Text("😐😐😐😐😐😐😐😐😐")
.padding()
.frame(maxWidth: .infinity)
.background(Color.cyan)
Text("😐😐😐😐😐😐")
.padding()
.frame(maxWidth: .infinity)
.background(Color.green)
Text("😐😐😐😐")
.padding()
.frame(maxWidth: .infinity)
.background(Color.orange)
}
.border(Color.black)
}
}
FixedSize 사용
...
.border(Color.black)
.fixedSize(horizontal: true, vertical: false)
분명 VStack 내부에 frame에 maxWidth: .infintiy 로 설정했습니다.
때문에 위 사진 결과처럼 width는 최대한 화면 끝까지 늘어난 모습으로 그려졌습니다.
하지만 이후 FixedSize 를 적용한 결과 내부 컨텐츠 크기에 맞게 크기가 적용된 것을 볼 수 있습니다.
이번엔 HStack으로 바꾸고 maxWitdh를 maxHeight로 바꾸겠습니다.
struct FixedSizeView: View {
var body: some View {
HStack {
Text("😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐")
.padding()
.frame(maxHeight: .infinity)
.background(Color.cyan)
Text("😐😐😐😐😐😐")
.padding()
.frame(maxHeight: .infinity)
.background(Color.green)
Text("😐😐😐😐")
.padding()
.frame(maxHeight: .infinity)
.background(Color.orange)
}
.border(Color.black)
}
}
fixedSize 추가
.fixedSize(horizontal: false, vertical: true) // 추가
위 결과로 알 수 있는건 .infinty 로 설정된 frame 이라고해도 fixedSize 가 적용되면 컨테이너뷰 내부에 들어가있는 뷰의 컨텐츠 크기에 영향을 받는다는것을 알 수있습니다.
fixedSize에는 horizontal, vertical 을 파라미터로 받습니다.
해당 파라미터를 true 를 설정하면
가로 또는 세로로 컨테이너 내뷰 뷰의 컨텐츠의 세로 크기 가로 크기를 이상적인
즉, 컨테이너 내뷰 뷰의 크기에 맞게 설정해줍니다.
.fixedSize(horizontal: false, vertical: true)
fixedSize 와 frame(idealWidth, idealHeight) 관계
fixedSize의 적용을 받으면 maxWidth, minWidth, minHeight, maxHeight 보다
idealWidth, idealHeight 우선 적용됩니다.
struct FixedSizeView: View {
var body: some View {
HStack {
Text("😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐")
.padding()
.frame(maxHeight: 200)
.background(Color.cyan)
}
.border(Color.black)
.fixedSize(horizontal: false, vertical: true)
}
}
여기서 idealHeight: 300으로 추가해주면
.frame(idealHeight: 300, maxHeight: 200)
이러한 결과가 나옵니다.
최종적으로 idealWidth 와 idealHeight 를 지정하고
.fixedSize(horizontal: true, vertical: true)
수정자를 적용해주면 idealWidth 와 idealHeight 각각 지정된 150의 크기로 뷰의 크기가 정해집니다.
struct FixedSizeView: View {
var body: some View {
HStack {
Text("😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐😐")
.padding()
.frame(idealWidth: 150, maxWidth: .infinity, idealHeight: 150, maxHeight: 200)
.background(Color.cyan)
}
.border(Color.black)
.fixedSize(horizontal: true, vertical: true)
}
}
이상입니다 😎
'Development > SwiftUI' 카테고리의 다른 글
SwiftUI) .sheet 배경 투명하게 만들기 (ios16.4 대응) (0) | 2023.04.05 |
---|---|
xcode 14.2 - Info.plist contained no UIScene configuration dictionary (looking for configuration named "(no name)") 해결방법 (0) | 2023.01.20 |
SwiftUI) @Environment와 dismiss를 사용하는 올바른 방법 (0) | 2022.10.03 |
SwiftUI)@Environment 와 @EnvironmentObject (0) | 2022.09.29 |
SwiftUI) @State와 @Binding 란? (0) | 2022.09.28 |