如何 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 太新了,我在网上找不到任何相关信息。

你可以对环境做出反应。例如,如果您想对 horizo​​ntalSizeClass 做出反应(常规与紧凑):

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 {
                    ...
                }
            }
        }
    }
}