swiftui - SwiftUI 导航视图 - 在多个视图中处理大小类
问题描述
如果设备处于纵向/横向模式,我打算使用会有所不同的菜单('MenuView')。我正在使用尺寸类来确定设备类型,这成功地重绘了旋转视图。菜单使用导航视图/链接将您带到进一步的视图(“详细视图”);此视图对于纵向和横向也有不同的视图。我再次使用尺寸类根据旋转成功重绘视图。
但是,我发现当我在DetailedView 中并旋转设备时,显示会直接跳回MenuView,因为它当然已经识别出尺寸等级的变化并调整了该视图。我希望显示保持在此视图中。
当我旋转显示“DetailedView”的设备时,如何防止应用程序跳转到“MenuView”?下面的 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)
}
}
解决方案
推荐阅读
- joomla - 如何构建一个工具来输入和访问云上的数据
- python-3.x - 为什么 start_queue_runners() 函数与 shuffle_batch() 函数一起使用
- r - 如何在不同的数据框中找到共同的变量?
- javascript - 在 es6 类中制作画布意义
- node.js - 使用 Nodejs 的自然语言机器人(独立的 Windows 应用程序)
- ftp - WinSCP、.NET 库、校验和支持
- wso2 - 如何让用户使用他们的电子邮件地址登录?
- prolog - 有人可以解释一下 Prolog 列表中嵌套对的含义吗?
- mips - MIPS 架构执行称为交换的指令
- .net - vb.net 如何以与文件资源管理器>名称降序相同的反向字母数字顺序列出目录中的文件集合