project/Kuring(공지알림)

SwiftUI List accessory (feat. disclosure indicator)

lgvv 2022. 5. 31. 11:29

SwiftUI List accessory (feat. disclosure indicator)

 

이번에도 UIKit스러운 제목으로 가져가는데, 구글에서 검색할 때 SwiftUI를 UIKit 검색어로 매핑해서 찾고 있기 때문.

아직까지도 UIKit이 제일 익숙해서 그런가보다.

 

 

 

StackOverflow 답변의 접근법 

ZStack 통해 문제를 해결하고 있는데, 개인적으로 뭔가 깔끔하지는 않다고 느낌.

 

아래 코드처럼 UITableViewCell에서 ContentView 부분을 접근해서 해결해보고자 했는데 실패.

 

SwiftUI가 Instrument를 통해 성능을 분석하다 보면 UIKit을 감싸 두기만 한 것들도 많아서 시도해 본 케이스인데 올바른 접근 방법 같지는 않음.

init() { 
	UITableViewCell ... 
}

 

결국 StackOverflow에서 제시한 방향으로 개발 진행

 


올바른 케이스

ZStack을 이용해서 위에 EmptyView를 위치함.

그리고 EmptyView의 투명도를 0으로 조절하여 뒤에 인디케이터를 가림.

이후 Text를 얹어서 사용함.

import SwiftUI

struct didSelectRow: View {
    
    var body: some View {
        NavigationView {
            List {
                ForEach((0...10), id: \.self) { index in
                    ZStack {
                        NavigationLink {
                            secondView(index: index)
                        } label: {
                            EmptyView() // SwiftUI에서 기본적으로 제공하고 있습니다.
                        }
                        .opacity(0)
                        
                        Text("\(index)")
                    }
                }
            }
        }
    }
    
    func secondView(index: Int) -> some View {
        var body: some View {
            Text("\(index)")
        }
        
        return body
    }
}

struct nextView: View {
    let index: Int!
    var body: some View {
        Text("\(index)")
    }
}

 

 

스크린샷

 

결과물