我想根据设备方向更改显示的文本。视觉效果将描述我正在努力实现的目标:)
我想以纵向模式显示月份名称的简短格式,并且找到了各种帖子,描述了如何通过检测设备方向来实现这一点。我还发现这不是最佳实践类别,因此想知道是否有更好的方法。 代码只是一个VStack,在ScrollView中具有两个Text组件。
答案 0 :(得分:7)
我会稍微改变接受的答案,改为使用.onReceive
:
.onReceive(NotificationCenter.Publisher(center: .default, name: UIDevice.orientationDidChangeNotification)) { _ in
self.orientation = UIDevice.current.orientation
}
这应该会自动处理退订。
答案 1 :(得分:2)
SwiftUI似乎没有约束,也没有约束变体,例如界面生成器的定向。我认为目前尚无最佳实践。我会毫不犹豫地使用方向值,直到出现使我们能够更好地响应方向变化的东西。
我可能会做这样的事情来适应方向:
struct ContentView: View {
@State var orientation: UIDeviceOrientation = UIDevice.current.orientation
var body: some View {
Text(orientation.isLandscape ? "Landscape" : "Portrait")
.onAppear {
NotificationCenter.default.addObserver(forName: UIDevice.orientationDidChangeNotification, object: nil, queue: OperationQueue.main) { _ in
self.orientation = UIDevice.current.orientation
}
}
}
}