我正在尝试将我的 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)")
}
}
}
}
}
}
第一个图像是我所期望的(当使用“从右到左伪语言”时),第二个图像是未镜像的希伯来语/阿拉伯语的显示方式
尝试使用变量来修改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
}
}