Scope `navigationDestination` bind workaround (#93)
* Scope `navigationDestination` bind workaround * Update NavigationDestination.swift * wip
This commit is contained in:
parent
1bc2bc9111
commit
47dd574b90
|
@ -38,16 +38,23 @@
|
|||
/// the source of truth. Likewise, changes to `value` are instantly reflected in the
|
||||
/// destination. If `value` becomes `nil`, the destination is popped.
|
||||
/// - destination: A closure returning the content of the destination.
|
||||
@ViewBuilder
|
||||
public func navigationDestination<Value, Destination: View>(
|
||||
unwrapping value: Binding<Value?>,
|
||||
@ViewBuilder destination: (Binding<Value>) -> Destination
|
||||
) -> some View {
|
||||
self.modifier(
|
||||
_NavigationDestination(
|
||||
isPresented: value.isPresent(),
|
||||
destination: Binding(unwrapping: value).map(destination)
|
||||
if requiresBindWorkaround {
|
||||
self.modifier(
|
||||
_NavigationDestinationBindWorkaround(
|
||||
isPresented: value.isPresent(),
|
||||
destination: Binding(unwrapping: value).map(destination)
|
||||
)
|
||||
)
|
||||
)
|
||||
} else {
|
||||
self.navigationDestination(isPresented: value.isPresent()) {
|
||||
Binding(unwrapping: value).map(destination)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Pushes a view onto a `NavigationStack` using a binding and case path as a data source for
|
||||
|
@ -79,7 +86,7 @@
|
|||
// NB: This view modifier works around a bug in SwiftUI's built-in modifier:
|
||||
// https://gist.github.com/mbrandonw/f8b94957031160336cac6898a919cbb7#file-fb11056434-md
|
||||
@available(iOS 16, macOS 13, tvOS 16, watchOS 9, *)
|
||||
private struct _NavigationDestination<Destination: View>: ViewModifier {
|
||||
private struct _NavigationDestinationBindWorkaround<Destination: View>: ViewModifier {
|
||||
@Binding var isPresented: Bool
|
||||
let destination: Destination
|
||||
|
||||
|
@ -91,4 +98,10 @@
|
|||
.bind(self.$isPresented, to: self.$isPresentedState)
|
||||
}
|
||||
}
|
||||
|
||||
private let requiresBindWorkaround = {
|
||||
guard #available(iOS 16.4, macOS 13.3, tvOS 16.4, watchOS 9.4, *)
|
||||
else { return true }
|
||||
return false
|
||||
}()
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue