SwiftUI IPadOS应用基于方向更改文本

时间:2019-11-06 19:34:28

标签: text swiftui device-orientation

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

这是横向模式landscape mode 这是纵向模式portrait mode

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

2 个答案:

答案 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
            }
        }
    }
}