[소소한 개발 일지] NavigationSplitView에서 사이드바 활성화 여부 확인하기(SwiftUI)

Explanation

2024년도의 첫번째 포스팅이네요, 다들 새해 복 많이 받으세요!!
오늘은 간단하게 SwiftUI 관련 짧은 포스팅이랍니다.

요즘 SwiftUI를 사용해서 MacOS의 애플리케이션을 만들고 있는데요. 그러던 중 'NavigationSplitView'를 사용할 때, 사이드바가 활성화 되어 있는지를 확인할 수 있는 API를 따로 지원하지 않더라고요.

그래서 사이드바의 활성화 여부를 알 수 있는 방법을 고민하다 알아낸 방법을 적어보려 합니다.

1. GeometryReader를 사용한 사이드바 활성화 여부 확인

import SwiftUI

struct ContentView: View {
  @State private var isSidebar: Bool = false

  var body: some View {
    GeometryReader { geometry in
      NavigationSplitView {
        Text("Sidebar")
      } detail: {
        GeometryReader { innerGeometry in
          Text("isSidebar: \(String(isSidebar))")
            .padding()
            .onChange(of: innerGeometry.size) { oldValue, newValue in
              isSidebar = geometry.size.width - innerGeometry.size.width > 0
            }
        }
      }
    }
  }
}

#Preview {
    ContentView()
}

짜잔! 아주 간단한 코드인데요.

GeometryReader 라는 크기를 알려주는 컨테이너 뷰를 사용해서, 전체 너비와 컨텐츠 영역의 너비를 비교하면 이렇게 현재 사이드바의 활성화 상태를 알 수 있답니다.

끝