iOS, Swift/SwiftUI

SwiftUI 빈 공간에 사용하는 Color.clear 와 EmptyView

Developer88 2025. 3. 19. 16:58
반응형

오늘은 SwiftUI에서 빈공간에 사용하는,

Color.clear와 EmptyView에 대해 정리하겠습니다.

 

1. Color.clear와 EmptyView

Color.clear와 EmptyView()는,

둘다 시각적으로 보이지 않는 요소를 만들 때 사용되는데요.

 

하지만 실제 사용할 때 둘은 큰 차이가 있습니다.

 

  Color.clear EmptyView
주요 용도 투명 오버레이, 공간 예약, 이벤트 캡처 아무것도 표시 안 함을 명시적으로 나타낼 때 사용
공간 차지 지정된 크기의 공간을 차지함
지정하지 않으면,
부모 뷰가 제공하는 공간을 채움
공간을 전혀 차지하지 않음
사용자 상호작용 가능 (.contentShape 등으로 설정 가능) 공간이 없어 불가능
Modifer적용 가능 대부분 불가능
onAppear/
onDisappear
트리거 됨 트리거되지 않음
타입 Color View

 

 

EmptyView는 말 그대로 비어있는,

아무것도 없는 공간이고요.

Color.clear는 부모가 차지하는 공간 혹은 지정된 공간을 차지합니다.

 

따라서,

빈 공간이 필요하거나 이벤트 처리가 필요한 경우 Color.clear를,

아무것도 렌더링하지 않아야 할 때는 EmptyView()를 사용하는 것이 적합합니다.

 

2. 사용예

2-1. Color.clear

Color.clear는 아래와 같이,

투명하게 공간을 차지하면서,

유저의 탭제스쳐 캡처용으로 사용할 수 있습니다.

 

ZStack {
    backgroundContent
    
    // 전체 화면을 덮는 투명한 레이어 (클릭/탭 이벤트 캡처용)
    Color.clear
        .contentShape(Rectangle())
        .onTapGesture {
            hideKeyboard()
        }
}

 

2-2. EmptyView

EmptyView는 아래와 같이,

조건에 따라서,

뷰를 표시하거나 아무것도 표시하지 않을 때 사용합니다.

 

VStack {
    if shouldShowContent {
        ContentView()
    } else {
        EmptyView()
    }
}

 

 

사실은 아래와 같이,

else를 생략해버려도 문제는 없습니다.

사용하면 좀 더 명시적이라는 것 뿐이지요.

 

VStack {
    if shouldShowContent {
        ContentView()
    }
}

 

SwiftUI는 기본 UI를 커스텀하게 변경할 때,

다양한 방법을 동원하기도 하는데요.

이 방법중에는,

ZStack으로 감싸주고,

내부의 넣어야 할 부분을 비워두고,

바깥에서 View를 선언해서 사용하는 방법도 있습니다.

 

원래대로라면 넣어야 하는 부분에,

코드를 비워두고 바깥에 선언해서 사용할 경우,

이런 EmptyView()로 해당 부분을 의도적으로 비웠음을 명시하고,

커스텀뷰를 사용하는 경우에 유용하겠지요.

728x90