SwiftUI IPadOS 应用程序根据方向更改文本

SwiftUI IPadOS app change text based on orientation

我想根据设备方向更改显示的文本。视觉效果将更好地描述我想要实现的目标:)

这里是横屏模式 这里是纵向模式

我想在纵向模式下显示月份名称的短格式,并且找到了各种描述如何通过检测设备方向实现此目的的帖子。我还发现这不属于最佳实践类别,所以想知道是否有更好的方法。 代码只是一个 VStack,在 ScrollView 中有两个 Text 组件。

SwiftUI 似乎没有约束,或者像界面构建器那样的约束变体用于方向。我认为还没有确定的最佳实践。我会毫不犹豫地使用方向值,直到出现可以让我们更好地对方向变化做出反应的东西。

我可能会做这样的事情来对方向做出反应:

[更新@kevin-renskers 改进]

struct ContentView: View {
    @State var orientation: UIDeviceOrientation = UIDevice.current.orientation
    
    var body: some View {
        Text(orientation.isLandscape ? "Landscape" : "Portrait")
        .onReceive(NotificationCenter.Publisher(center: .default, name: UIDevice.orientationDidChangeNotification)) { _ in
          self.orientation = UIDevice.current.orientation
        }
    }
}

我会稍微更改已接受的答案,改为使用 .onReceive:

.onReceive(NotificationCenter.Publisher(center: .default, name: UIDevice.orientationDidChangeNotification)) { _ in
  self.orientation = UIDevice.current.orientation
}

这应该会自动处理取消订阅。