List cell
콘텐츠를 하나의 리스트 단위로 표현하는 요소로, 이미지, 텍스트, 인터랙션 요소 등을 유연하게 조합하여 구성할 수 있습니다. 일관되고 정돈된 형태로 정보를 탐색할 수 있도록 돕습니다.
ListCell은 앱 내에서 리스트 형태로 정보를 표시할 때 사용되는 기본 컴포넌트입니다. 라벨, 부가 설명과 함께 네 종류의 콘텐츠 슬롯(leadingResources(_:), labelTrailingResources(_:), trailingResources(_:), extraResources(_:))을 제공하며 다양한 스타일로 커스터마이징할 수 있습니다.
네 슬롯은 셀 안에서 각각 다음 위치를 차지하며, 슬롯마다 여러 요소를 나열할 수 있습니다. 슬롯에 넣을 수 있는 요소는 ListCell.Resource에 슬롯별로 정의되어 있어, 다른 슬롯 전용 요소를 넘기면 컴파일되지 않습니다.
- leadingResources(_:): 라벨 앞, 항목 간 간격 8
- labelTrailingResources(_:): 라벨 바로 뒤, 항목 간 간격 4
- trailingResources(_:): 셀 오른쪽 끝, 항목 간 간격 8
- extraResources(_:): 설명 아래, 항목 간 간격 6
목록에 없는 구성이 필요하면 각 슬롯 타입의 slot(_:) 팩토리로 임의 뷰를 넣을 수 있습니다.
셀이 놓이는 리스트를 기준으로 두 형태 중 하나를 variant(_:)로 정합니다. 좌우 여백을 리스트가 주는 ListCell.Variant.inset이 기본값이고, 셀이 리스트 폭을 채우며 좌우 여백을 직접 갖는 형태는 ListCell.Variant.full입니다. 콘텐츠가 놓이는 자리는 두 형태가 같고, 인터랙션 배경이 리스트 좌우 끝까지 닿는지만 달라집니다.
비활성화는 SwiftUI 표준 disabled(_:)를 사용합니다. 상위 컨테이너에 한 번 걸면 하위 컴포넌트까지 함께 비활성 스타일로 표시됩니다. 비활성 셀은 탭 이벤트를 받지 않으며 라벨·설명·콘텐츠 슬롯에 foregroundDisablePrimary 색상이 적용됩니다.
Note
콘텐츠 슬롯에는 전경색으로 전달되므로, 슬롯 안에서 색상을 직접 지정한 뷰에는 적용되지 않습니다.
init(label: String, onTap: (() -> Void)?)
셀 컴포넌트를 초기화합니다.
-
Parameters
var body: some View
뷰의 내용과 동작을 정의합니다.
func chevron(Bool) -> ListCell
셀 우측에 화살표(chevron) 아이콘을 추가합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
주로 탭했을 때 다른 화면으로 이동하는 셀에 사용됩니다.
func description(String?) -> ListCell
셀에 부가 설명을 추가합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
설명은 라벨 아래에 작은 글씨로 표시되는 부가 설명 텍스트입니다.
func divider(Bool) -> ListCell
셀 하단에 구분선을 추가합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
func extraResources([Resource.Extra]) -> ListCell
설명 아래에 표시할 요소를 지정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
셀 폭을 모두 사용하며, 여러 개를 넘기면 6포인트 간격으로 가로 배치됩니다.
func highlight(String) -> ListCell
라벨과 설명의 특정 텍스트를 강조 표시합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
지정한 문자열과 일치하는 부분을 굵은 글씨(bold)로 강조 표시합니다. 대소문자를 구분하지 않으며, 라벨과 description(_:) 각각에서 첫 번째로 일치하는 부분만 강조됩니다.
func labelColor(Color.Semantic) -> ListCell
라벨 텍스트의 color 속성을 조정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
func labelTrailingResources([Resource.LabelTrailing]) -> ListCell
라벨 행의 오른쪽 끝에 표시할 요소를 지정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
배지나 인증 아이콘처럼 라벨에 딸린 요소를 배치할 때 사용합니다. 여러 개를 넘기면 4포인트 간격으로 가로 배치되며, 높이가 22포인트로 고정되어 행 높이를 늘리지 않습니다.
Note
라벨이 2줄 이상일 때 표시 위치는 verticalAlign(_:)을 따릅니다.
func labelVariant(Typography.Variant) -> ListCell
라벨 텍스트의 variant 속성을 조정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
func labelWeight(Typography.Weight) -> ListCell
라벨 텍스트의 weight 속성을 조정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
Note
selected가true인 셀은 이 값과 무관하게bold로 표시됩니다.
func leadingResources([Resource.Leading]) -> ListCell
셀 좌측에 표시할 요소를 지정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
아이콘, 체크박스, 아바타, 썸네일 등을 셀 라벨 앞에 배치할 수 있습니다. 여러 개를 넘기면 8포인트 간격으로 가로 배치됩니다.
func selected(Bool) -> ListCell
셀을 선택된 상태로 설정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
선택된 셀은 라벨 텍스트의 색상이
surfaceBrandPrimary로 변경되고, 텍스트 두께가 bold로 설정되며, trailing 영역에 체크 아이콘이 표시됩니다. chevron(_:)을 켠 셀에서는 화살표가 체크 아이콘 오른쪽에 그대로 남습니다.Important
체크 아이콘은 trailingResources(_:)와 자리를 공유하므로 둘을 함께 표시할 수 없습니다. trailing 요소가 있으면 그쪽이 표시되고 체크 아이콘은 나타나지 않으며, 이때 선택 상태는 라벨의 색과 굵기로만 드러납니다. 선택 여부를 아이콘으로도 보여야 하면 leadingResources(_:)의 체크박스·라디오를 사용하세요.
func textEllipsis(Bool) -> ListCell
텍스트의 생략 처리 여부를 설정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
true로 설정하면 라벨과 설명이 각각 한 줄로 제한되고, 초과 텍스트는 말줄임 처리됩니다.false인 경우 두 텍스트 모두 줄 수 제한 없이 줄바꿈됩니다.
func trailingResources([Resource.Trailing]) -> ListCell
셀 우측에 표시할 요소를 지정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
값 텍스트, 배지, 버튼, 스위치 등을 셀 오른쪽 끝에 배치할 수 있습니다. 여러 개를 넘기면 8포인트 간격으로 가로 배치됩니다.
Note
selected(_:)가
true인 셀에서도 이 요소가 우선 표시되며, 선택 상태의 체크 아이콘은 이 슬롯이 비었을 때만 나타납니다.
func variant(Variant) -> ListCell
셀의 형태를 설정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
셀의 좌우 여백과 인터랙션 효과(hover·pressed 배경)의 확장 폭·모서리 둥글기가 함께 정해집니다. 두 형태의 차이는 ListCell.Variant를 참고하세요.
Note
4.0.0에서 제거된
fillWidth(_:)·interactionPadding(_:)을 대체합니다.fillWidth(false)는 ListCell.Variant.inset,fillWidth(true)는 ListCell.Variant.full에 대응합니다.
func verticalAlign(VerticalAlign) -> ListCell
셀 내 콘텐츠의 수직 정렬을 조정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
라벨이 2줄 이상일 때 leading·labelTrailing·trailing 콘텐츠를 첫 행에 맞출지, 셀 중앙에 맞출지 정합니다.
func verticalPadding(VerticalPadding) -> ListCell
상하 여백의 크기를 조정합니다.
-
Parameters
-
Return Value
수정된 ListCell 인스턴스
-
Discussion
정해진 네 단계(
none·small·medium·large)로 표현할 수 없는 간격은 ListCell.VerticalPadding.custom(_:)으로 직접 지정할 수 있습니다.Note
여백이
0인 셀은 인터랙션 효과를 표시하지 않습니다.
enum Resource
ListCell의 각 슬롯에 표시할 요소들의 Namespace입니다.
-
Overview
슬롯마다 쓸 수 있는 요소가 다르므로 슬롯별로 타입을 나눠 두었습니다. 예를 들어 ListCell.Resource.Trailing.switch(checked:onSelect:)는 trailingResources(_:)에만 넘길 수 있고, leadingResources(_:)에 넘기면 컴파일되지 않습니다.
미리 정의된 요소는 크기와 정렬이 셀 스펙(행 최소 높이 24)에 맞춰 고정됩니다. 목록에 없는 구성이 필요하면 각 타입의
slot(_:)팩토리를 사용합니다.Important
slot(_:)으로 넣은 뷰에는 이 크기 제약이 적용되지 않습니다. 행 높이가 밀리지 않게 하려면 사용처에서frame(...)이나fixedSize(...)로 크기를 직접 정해야 합니다.
enum Extra
설명 아래(extraResources(_:))에 표시할 요소입니다.
case contentBadge(ContentBadge.Variant, title: String)
콘텐츠 배지
-
Parameters
case slotView(() -> AnyView)
임의 뷰. slot(_:) 팩토리로 생성합니다.
case text(String)
텍스트
-
Parameters
static func slot<V>(() -> V) -> Extra
목록에 없는 구성을 직접 배치합니다.
-
Parameters
-
Return Value
구성된 요소
enum LabelTrailing
라벨 행 오른쪽 끝(labelTrailingResources(_:))에 표시할 요소입니다.
case contentBadge(ContentBadge.Variant, title: String)
콘텐츠 배지
-
Parameters
case icon(Icon, tintColor: SwiftUI.Color)
아이콘 (22×22)
-
Parameters
case slotView(() -> AnyView)
임의 뷰. slot(_:) 팩토리로 생성합니다.
static func slot<V>(() -> V) -> LabelTrailing
목록에 없는 구성을 직접 배치합니다.
-
Parameters
-
Return Value
구성된 요소
enum Leading
셀 좌측(leadingResources(_:))에 표시할 요소입니다.
case avatar(String, variant: Avatar.Variant)
아바타 (40×40)
-
Parameters
case checkbox(checked: Bool, onSelect: ((Bool) -> Void)?)
체크박스
-
Parameters
case icon(Icon, tintColor: SwiftUI.Color)
아이콘 (22×22)
-
Parameters
case largeIcon(Icon, tintColor: SwiftUI.Color)
배경이 있는 큰 아이콘 (컨테이너 36×36 / 아이콘 20×20)
-
Parameters
case radio(checked: Bool, onSelect: ((Bool) -> Void)?)
라디오
-
Parameters
case slotView(() -> AnyView)
임의 뷰. slot(_:) 팩토리로 생성합니다.
case thumbnail(String)
썸네일 (56×56 정사각, 둥근 모서리·테두리 적용)
-
Parameters
static func slot<V>(() -> V) -> Leading
목록에 없는 구성을 직접 배치합니다.
-
Parameters
-
Return Value
구성된 요소
enum Trailing
셀 우측(trailingResources(_:))에 표시할 요소입니다.
case button(title: String, color: Button.Color, handler: (() -> Void)?)
버튼 (Solid / Small)
-
Parameters
case contentBadge(ContentBadge.Variant, title: String)
콘텐츠 배지
-
Parameters
case icon(Icon, tintColor: SwiftUI.Color)
아이콘 (22×22)
-
Parameters
case iconButton(Icon, handler: (() -> Void)?)
아이콘 버튼 (차지하는 자리 20×20 / 인터랙션 영역 32×32, 배경 없음)
-
Parameters
case slotView(() -> AnyView)
임의 뷰. slot(_:) 팩토리로 생성합니다.
case `switch`(checked: Bool, onSelect: ((Bool) -> Void)?)
스위치
-
Parameters
case textButton(title: String, color: TextButton.Color, handler: (() -> Void)?)
텍스트 버튼
-
Parameters
case value(String)
값 텍스트
-
Parameters
static func slot<V>(() -> V) -> Trailing
목록에 없는 구성을 직접 배치합니다.
-
Parameters
-
Return Value
구성된 요소
enum Variant
셀이 놓이는 리스트(컨테이너)의 가장자리를 기준으로 한 셀의 형태입니다.
-
Overview
좌우 여백과 인터랙션 배경의 확장 폭·모서리 둥글기를 하나로 묶은 값으로, 세 값을 따로 지정할 수는 없습니다. 두 형태 모두 콘텐츠는 리스트 기준 같은 자리에 놓이고, 인터랙션 배경이 리스트 좌우 끝까지 닿는지만 달라집니다.
case full
인터랙션 배경이 리스트 좌우 끝까지 각지게 채우는 형태입니다.
-
Discussion
셀이 리스트 폭을 채우고 좌우 여백 20을 직접 가지며, 인터랙션 배경은 셀과 같은 크기로 그려집니다.
case inset
인터랙션 배경이 리스트 좌우 끝에 닿지 않고 안쪽에 둥글게 그려지는 형태입니다.
-
Discussion
셀은 콘텐츠 폭을 그대로 쓰고 좌우 여백은 리스트가 줍니다. 인터랙션 배경만 셀보다 좌우로 12 넓어지고 모서리가 16 둥글게 처리됩니다.
enum VerticalAlign
셀 내 콘텐츠의 수직 정렬을 나타내는 열거형입니다.
case center
셀 높이의 중앙에 정렬
case top
첫 행에 맞춰 정렬
enum VerticalPadding
상하 여백을 나타내는 열거형입니다.
-
Overview
셀 컴포넌트의 상하 여백을 조정할 때 사용되며, 각 케이스는 다양한 크기의 여백을 제공합니다.
case custom(CGFloat)
직접 지정한 여백
-
Discussion
정해진 네 단계로 표현할 수 없는 간격이 필요할 때만 사용합니다.
case large
큰 여백 (16)
case medium
중간 여백 (12)
case none
여백 없음
case small
작은 여백 (8)
Conforms To
Swift.Sendable
SwiftUICore.View
