У меня все приложение завернуто в NavigationView, и я пытаюсь продублировать переход в коротком видео, указанном ниже. Судя по тому, что я вижу, похоже, что они представляют fullScreenCover
, и когда ссылка нажимается, она отклоняет fullScreenCover
и помещает все, что было нажато, в стек навигации после завершения отклонения.
У меня на данный момент это...
@Environment(\.dismiss) var dismiss
ScrollView {
VStack {
ForEach(viewModel.searchResults, id: \.self) { bottle in
NavigationLink(destination: BottleDetailView(bottle: bottle)) {
BottleCell(bottle: bottle) <-- tapping this would dismiss fullscreenCover and push this NavigationLink into the NavigationStack of my app
}
}
}
}
Я попытался встроить другой навигационный вид в полноэкранный режим, но это даже не близко к дублированию перехода выше. Как я могу продублировать это?
@ChrisR Исправлено. Извини за это.
Вы можете использовать программно управляемый NavigationStack
. В fullscreenCover
сначала закройте, затем подождите, пока он исчезнет, затем установите пункт назначения навигации.
Вот полный пример:
struct ContentView: View {
@State private var search = ""
@State private var showSheet = false
// programmatically controllable Navigation Stack
@State private var path = [Int]()
var body: some View {
NavigationStack(path: $path) {
VStack {
searchField
.disabled(true)
.onTapGesture {
showSheet = true
}
Spacer()
Text("Other stuff")
Spacer()
}
.padding()
.navigationTitle("Find something")
.fullScreenCover(isPresented: $showSheet) {
fullscreenSheet
}
// this defines the destination(s) for the programatically activated navigation stack
.navigationDestination(for: Int.self) { value in
Text("Detail View for Result \(value)")
}
}
}
var fullscreenSheet: some View {
VStack(alignment: .leading, spacing: 30) {
HStack {
searchField
Button("Cancel") { showSheet = false }
}
// dummy search results
ForEach(1..<6) { result in
Button("Result \(result) >") {
// dismiss sheet
showSheet = false
// wait and trigger navigation
Task {
try await Task.sleep(for: .seconds(0.1))
self.path = [result]
}
}
}
Spacer()
}
.padding()
}
var searchField: some View {
HStack {
Image(systemName: "magnifyingglass")
.foregroundColor(.white)
TextField("", text: $search,
prompt: Text("What are you looking for?")
.foregroundColor(.white)
)
}
.padding()
.background(
Capsule().fill(.gray)
)
}
}
ваша ссылка на видео битая