I'm trying to get my navigation view style to be stacked on iPad but default on iPhone.
Code:
.navigationViewStyle(UIDevice.current.userInterfaceIdiom == .pad ? StackNavigationViewStyle() : DefaultNavigationViewStyle())
Giving me the error:
Result values in '? :' expression have mismatching types 'StackNavigationViewStyle' and 'DefaultNavigationViewStyle'
Are these not both NavigationViewStyle subclasses?
A navigation view style represented by a view stack that only shows a single top view at a time.
If you have a navigation view and you want to push a new view onto SwiftUI's navigation stack, you should use NavigationLink .
I recommend to extract it into simple wrapper modifier and use it in place where needed. Here is modifier:
extension View {
@ViewBuilder
public func currentDeviceNavigationViewStyle() -> some View {
if UIDevice.current.userInterfaceIdiom == .pad {
self.navigationViewStyle(StackNavigationViewStyle())
} else {
self.navigationViewStyle(DefaultNavigationViewStyle())
}
}
}
extension View {
public func currentDeviceNavigationViewStyle() -> AnyView {
if UIDevice.current.userInterfaceIdiom == .pad {
return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
} else {
return AnyView(self.navigationViewStyle(DefaultNavigationViewStyle()))
}
}
}
backup
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With