관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - SwiftUI] LayoutPriority 개념 (뷰 우선순위) 본문

iOS 응용 (SwiftUI)

[iOS - SwiftUI] LayoutPriority 개념 (뷰 우선순위)

jake-kim 2024. 12. 17. 01:30

LayoutPriority 개념

  • layoutPriority값이 크면, 뷰가 다른 뷰보다 커질 수 있는 힘이 큼
    • 기존 swift에서 ContentHuggingPriority, ContentCompressionResistancePriority 두 개를 두어서 헷갈렸던 것을 SwiftUI에서는 layoutPriority하나로 표현

https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:)

  • HStack에 두 개 의 텍스트가 있을 때 예시
    • 참고) 일반적으로는 HStack이 있을때 두 개의 뷰에는 동일한 width로 할당되지만 띄어쓰기가 있으면 내부적인 개행 처리 때문에 아래처럼 균등하지는 않게끔 배치됨
struct ContentView: View {
    var body: some View {
        HStack {
            Text("This is a moderately long string.")
                .font(.largeTitle)
                .border(Color.gray)

            Spacer()

            Text("This is a higher priority string.")
                .font(.largeTitle)
                .border(Color.gray)
        }
    }
}

  • cf) 만약 개행이 일정한 문자열인 경우 width값이 동일하게 할당
struct ContentView: View {
    var body: some View {
        HStack {
            Text("1 2 3 4 5 6 7 8 9 a b c d e f g")
                .font(.largeTitle)
                .border(Color.gray)

            Spacer()

            Text("1 2 3 4 5 6 7 8 9 a b c d e f g")
                .font(.largeTitle)
                .border(Color.gray)
        }
    }
}

 

  • 오른쪽 뷰의 크기가 더욱 커지게 하고 싶은 경우는 layoutPriority를 높여서 사용
    • 참고) layoutPriority의 디폴트 값은 0
struct ContentView: View {
    var body: some View {
        HStack {
            Text("This is a moderately long string.")
                .font(.largeTitle)
                .border(Color.gray)

            Spacer()

            Text("This is a higher priority string.")
                .font(.largeTitle)
                .layoutPriority(1) // <-
                .border(Color.gray)
        }
    }
}

  •  
  • layoutPriority가 낮으면 얼마만큼 줄어드는지?
    • 애플 문서에 따르면 뷰가 가질 수 있는 최소의 크기 (애플 내부적으로 정해준 크기만큼 줄어드는 것)

https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:)

* 참고

- https://developer.apple.com/documentation/swiftui/view/layoutpriority(_:)

Comments