我有一个视图,它是另外两个视图的VStack
,仅此而已。
这在纵向方向(或高/瘦的macOS窗口)中效果很好,但是它压扁,笨拙,并且某些部分在横向(或宽/短的macOS窗口)中不可用。
如何使该视图在人像/高/瘦的情况下返回VStack
,而在风景/宽/短时返回HStack
?
我尝试了很多事情,但是都导致了编译器错误。由于SwiftUI太新了,所以我在网上找不到任何有关此的信息。
答案 0 :(得分:3)
我使用GeometryReader并比较了宽度和高度来解决此问题。如果width> height,则设备处于横向模式,否则处于纵向模式:
struct MyView: View {
var body: some View {
return GeometryReader { proxy in
if proxy.size.width < proxy.size.height {
VStack {
...
}
} else {
HStack {
...
}
}
}
}
}
答案 1 :(得分:2)
您可以对环境做出反应。例如,如果您想对horizontalSizeClass(常规vs紧凑)做出反应:
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)
}
}