在这种情况下,我打算使用一个菜单(“ MenuView”),如果设备处于纵向/横向模式,该菜单会有所不同。我正在使用尺寸类来确定设备类型,并且在旋转时成功重绘了视图。菜单使用导航视图/链接将您带到另一个视图(“ DetailedView”);此视图在纵向和横向方面也具有不同的视图。再次,我使用尺寸类基于旋转成功地重绘视图。
但是,我发现,当我进入DetailedView并旋转设备时,显示当然会跳回到MenuView,因为它当然已经识别出大小类更改并调整了该视图。我希望该显示保留在该视图中。
当旋转显示“ DetailedView”的设备时,如何防止应用程序跳至“ MenuView”?下面的菜单视图中的代码:
注意:在这种情况下,我正在使用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-从PortraitMenuView和LandscapeMenuView调用。 PortraitMenuView中包含的代码-LandscapeMenuView中包含相同的导航链接
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()
}
}
}
}
}
}
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)
}
}