如何 return 不同方向的不同视图?
How do I return a different view for a different orientation?
我有一个视图是其他两个视图的 VStack
,仅此而已。
这在纵向(或 tall/skinny macOS windows)中效果很好,但它被压扁、笨拙,并且某些部分在横向(或 wide/short macOS)中不可用windows).
如何使此视图 return 在纵向时为 VStack
/tall/skinny,但在横向时为 HStack
/wide/short?
我尝试了很多东西,但都导致了编译器错误。由于 SwiftUI 太新了,我在网上找不到任何相关信息。
你可以对环境做出反应。例如,如果您想对 horizontalSizeClass 做出反应(常规与紧凑):
struct MyView: View {
@Environment(\.horizontalSizeClass) var horizontalSizeClass: UserInterfaceSizeClass
var body: some View {
Group {
if horizontalSizeClass == .regular {
HStack {
Text("A")
Text("B")
}
} else { // compact
VStack {
Text("A")
Text("B")
}
}
}.border(Color.red)
}
}
我使用 GeometryReader 并比较宽度和高度解决了这个问题。如果宽度 > 高度,则设备处于横向模式,否则处于纵向模式:
struct MyView: View {
var body: some View {
return GeometryReader { proxy in
if proxy.size.width < proxy.size.height {
VStack {
...
}
} else {
HStack {
...
}
}
}
}
}
我有一个视图是其他两个视图的 VStack
,仅此而已。
这在纵向(或 tall/skinny macOS windows)中效果很好,但它被压扁、笨拙,并且某些部分在横向(或 wide/short macOS)中不可用windows).
如何使此视图 return 在纵向时为 VStack
/tall/skinny,但在横向时为 HStack
/wide/short?
我尝试了很多东西,但都导致了编译器错误。由于 SwiftUI 太新了,我在网上找不到任何相关信息。
你可以对环境做出反应。例如,如果您想对 horizontalSizeClass 做出反应(常规与紧凑):
struct MyView: View {
@Environment(\.horizontalSizeClass) var horizontalSizeClass: UserInterfaceSizeClass
var body: some View {
Group {
if horizontalSizeClass == .regular {
HStack {
Text("A")
Text("B")
}
} else { // compact
VStack {
Text("A")
Text("B")
}
}
}.border(Color.red)
}
}
我使用 GeometryReader 并比较宽度和高度解决了这个问题。如果宽度 > 高度,则设备处于横向模式,否则处于纵向模式:
struct MyView: View {
var body: some View {
return GeometryReader { proxy in
if proxy.size.width < proxy.size.height {
VStack {
...
}
} else {
HStack {
...
}
}
}
}
}