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
}
这应该会自动处理取消订阅。
我想根据设备方向更改显示的文本。视觉效果将更好地描述我想要实现的目标:)
这里是横屏模式
我想在纵向模式下显示月份名称的短格式,并且找到了各种描述如何通过检测设备方向实现此目的的帖子。我还发现这不属于最佳实践类别,所以想知道是否有更好的方法。 代码只是一个 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
}
这应该会自动处理取消订阅。