SwiftUI: горизонтальный ScrollView внутри NavigationLink нарушает навигацию

Я хочу использовать простой горизонтальный ScrollView в виде NavigationLink внутри List. Однако, нажав на ScrollView не зарегистрирован NavigationLink и поэтому не выполняет навигацию к месту назначения.

NavigationView {
    List {
        NavigationLink(destination: Text("Detail")) {
            ScrollView(.horizontal) {
                Text("Tapping here does not navigate.")
            }
        }
    }
}

Любые идеи о том, как мы можем предотвратить ScrollView от захвата жеста навигации?

2 ответа

Ты можешь двигаться NavigationLink к background и активировать в onTapGesture:

struct ContentView: View {
    @State var isLinkActive = false
    
    var body: some View {
        NavigationView {
            List {
                ScrollView(.horizontal) {
                    Text("Tapping here does not navigate.")
                }
                .onTapGesture {
                    isLinkActive = true
                }
            }
            .background(
                NavigationLink(destination: Text("Detail"), isActive: $isLinkActive) {}
            )
        }
    }
}

Конечная цель не ясна, но следующая альтернатива также работает (протестировано с Xcode 12 / iOS 14)

NavigationView {
    List {
        ScrollView(.horizontal) {
            NavigationLink(destination: Text("Detail")) {
                Text("Tapping here does not navigate.")
            }
        }
    }
}
Другие вопросы по тегам