首页 > 解决方案 > 以 RTL 语言翻转的 SwiftUI 菜单内容

问题描述

在 project.pbxproj 中,我将 developmentRegion 更改为 ar 以在整个应用程序中强制使用阿拉伯语和 RTL 布局,除此示例中的菜单视图内容外,一切看起来都不错:

import SwiftUI

struct ContentView: View {
    
    @State private var selectedTime: Int = 0
    
    var body: some View {
        Form {
            Picker("", selection: $selectedTime) {
                Text("صباحاً").tag(0)
                Text("مساءً").tag(1)
            }
            .labelsHidden()
            .pickerStyle(SegmentedPickerStyle())
            Menu {
                Button("السبت", action: {})
                Button("الأحد", action: {})
                Button("الاثنين", action: {})
                Button("الثلاثاء", action: {})
                Button("الاربعاء", action: {})
                Button("الخميس", action: {})
                Button("الجمعة", action: {})
            } label: {
                Label("اليوم", systemImage: "calendar")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .preferredColorScheme(.dark)
    }
}

菜单内的按钮标签被翻转

菜单按钮标签被翻转

任何帮助表示赞赏,谢谢

标签: iosswiftxcodeswiftuimenu

解决方案


实现此目的的唯一方法是通过设置更改语言重新启动应用程序。

  1. 在项目设置设置中添加您需要的任何语言: 项目设置

  2. 您必须添加settings.bundle

File -> New -> File -> Settings Bundle

设置

如果需要,删除无用的设置

  1. 前往设置并更改它: 设置

重要笔记

  • 直到现在我找不到任何解决方法(18 August 2021
  • 如果愿意,您应该要求用户更改语言并为他们打开设置
  • 您可以通过以下方式以编程方式更改语言:
UserDefaults.standard.set(["ar"], forKey: "AppleLanguages")

但!

  • 设置必须存在
  • 应用程序必须在语言更改后重新启动
  • exit()如果语言不是,您可以在设置语言后强制关闭应用程序,例如使用代码ar

开发说明

模拟器不断缓存设置。因此,您可能会遇到阻止您查看当前设置的问题。尝试在测试项目中测试流程并在实际项目中实施结果。


推荐阅读