SwiftUI 视图未镜像为 RTL 语言

问题描述 投票:0回答:1

我正在尝试将我的 SwiftUI 应用程序本地化为 RTL 语言,但无法镜像视图(导航演示方向、链接 V 形方向、工具栏项目位置等)。我使用下面的代码创建了一个非常简单的项目,当我编辑方案以使用“从右到左的伪语言”作为“应用程序语言”,视图确实会被镜像。但是,当我选择希伯来语或阿拉伯语,甚至将模拟器或设备的系统语言设置为 RTL 语言时,它不会像 LTR 语言那样镜像和显示。

struct ContentView: View {
  var body: some View {
    NavigationStack {
      List {
        ForEach(1..<10) { i in
          NavigationLink {
            Text("Hello world")
          } label: {
            Text("\(i)")
          }
        }
      }
    }
  }
}

第一个图像是我所期望的(当使用“从右到左伪语言”时),第二个图像是未镜像的希伯来语/阿拉伯语的显示方式

ios swift swiftui localization right-to-left
1个回答
0
投票

尝试使用变量来修改layoutDirection的方法

示例代码:

struct ContentView: View {
    @State private var isRTL = false  // <-- here
    
    var body: some View {
        NavigationStack {
            List {
                ForEach(1..<10) { i in
                    NavigationLink {
                        Text("Hello world")
                    } label: {
                        Text("\(i)")
                    }
                }
            }
        }
        .onAppear {
            isRTL = Locale.current.language.languageCode?.identifier == "he"  // <-- here
        }
        .environment(\.layoutDirection, isRTL ? .rightToLeft : .leftToRight)  // <-- here
    }
    
}
© www.soinside.com 2019 - 2024. All rights reserved.