SwiftUI导航视图-在多个视图上处理大小类
我有一个场景,我打算使用一个菜单(“MenuView”),如果设备处于纵向/横向模式,该菜单会有所不同。我使用大小类来确定设备类型,这成功地在旋转时重新绘制了视图。菜单使用导航视图/链接将您带到进一步的视图(“DetailedView”);此视图还具有不同的纵向和横向视图。我再次使用大小类根据旋转成功地重新绘制视图 然而,我发现,当我在DetailedView中旋转设备时,显示器会直接跳回菜单视图,因为它已经识别出大小类的更改并调整了该视图。我希望显示器保持在此视图中 当我旋转显示“DetailedView”的设备时,如何防止应用程序跳转到“MenuView”?下面菜单视图中的代码: 注意:在本例中,我使用的是SwiftUI导航视图-在多个视图上处理大小类,swiftui,swiftui-navigationlink,Swiftui,Swiftui Navigationlink,我有一个场景,我打算使用一个菜单(“MenuView”),如果设备处于纵向/横向模式,该菜单会有所不同。我使用大小类来确定设备类型,这成功地在旋转时重新绘制了视图。菜单使用导航视图/链接将您带到进一步的视图(“DetailedView”);此视图还具有不同的纵向和横向视图。我再次使用大小类根据旋转成功地重新绘制视图 然而,我发现,当我在DetailedView中旋转设备时,显示器会直接跳回菜单视图,因为它已经识别出大小类的更改并调整了该视图。我希望显示器保持在此视图中 当我旋转显示“Detail
StackNavigationViewStyle
任何帮助都将受到感激,提前感谢
struct MenuView: View {
@Environment(\.horizontalSizeClass) var horizontalSizeClass: UserInterfaceSizeClass?
@Environment(\.verticalSizeClass) var verticalSizeClass: UserInterfaceSizeClass?
var body: some View {
NavigationView {
Color("MainBg")
.edgesIgnoringSafeArea(.all)
if horizontalSizeClass == .compact {
PortraitMenuView()
} else {
LandscapeMenuView()
}
}.navigationViewStyle(StackNavigationViewStyle())
}
}
更新:DetailedView-这是从“肖像”菜单视图和“景观”菜单视图调用的。肖像菜单视图中包含的代码-景观菜单视图中包含相同的导航链接
struct DetailedView: View {
@Environment(\.horizontalSizeClass) var sizeHClass
@Environment(\.verticalSizeClass) var sizeVClass
var formulae: Functions
var body: some View {
ZStack {
Color.offWhite
.edgesIgnoringSafeArea(.all)
VStack {
Group {
if sizeHClass == .compact && sizeVClass == .compact {
DetailedViewLandscape()
} else {
DetailedViewPortrait()
}
}
}
}
}
}
菜单使用导航视图/链接将您带到进一步的视图(“DetailedView”)-其中是名为“
DetailedView
的”?@pawello2222谢谢,刚刚更新了代码。我希望这能满足您的需要(这里有点抱歉的n00b!)当您更改设备方向时,整个视图将被重新绘制-这意味着您的DetailedView不再存在。新的导航链接尚未激活。您可以通过编程实现,但您将看到过渡动画。不幸的是,在SwiftUI中不可能从导航层次结构中的特定点开始-您需要从根开始。
struct PortraitMenuView: View {
var body: some View {
VStack {
ZStack {
Circle()
.fill(Color("kMainBg"))
.frame(width: 300, height: 300)
.overlay(
Text("FORMULA FINDER")
.font(.largeTitle).bold()
.multilineTextAlignment(.center)
.minimumScaleFactor(0.005)
.lineLimit(2)
.frame(width: 210, height: 210)
)
}
Spacer()
NavigationLink(destination: DetailedView()) {
TileView(title: "Formulae", subtitle: "Functions and formulas", boxColor: Color.pastelGreen)
}.offset(x: 40)
}.padding(.bottom, 20)
}
}