Swift iOS以编程方式RTL我的应用程序布局

Swift iOS以编程方式RTL我的应用程序布局,ios,swift,Ios,Swift,我正在创建一个应用程序,允许用户选择2种语言,英语和阿拉伯语 因此,当用户选择阿拉伯语时,我希望我的应用程序具有RTL布局 问题是我该怎么做?我试过这样做:Settings>General>Language Region。如果我选择沙特阿拉伯作为地区,选择阿拉伯语作为语言,我的应用程序会自动进行RTL 正如您所见,该方法是通过手机设置实现的,并影响手机的整体布局 现在,我真正想做的就是让我的应用程序RTL不去Settings>General>Language Region,影响我手机的布局。因此

我正在创建一个应用程序,允许用户选择2种语言,英语和阿拉伯语

因此,当用户选择阿拉伯语时,我希望我的应用程序具有RTL布局

问题是我该怎么做?我试过这样做:
Settings>General>Language Region
。如果我选择沙特阿拉伯作为地区,选择阿拉伯语作为语言,我的应用程序会自动进行RTL

正如您所见,该方法是通过手机设置实现的,并影响手机的整体布局

现在,我真正想做的就是让我的应用程序RTL不去
Settings>General>Language Region
,影响我手机的布局。因此,当我点击我的应用程序“阿拉伯语”中的按钮时,我的应用程序将其布局更改为RTL

请提供任何帮助,我们将非常感谢您的帮助


谢谢

要添加从右到左的支持,请参阅-

您需要在此处构建自己的机制。正如您希望按钮更改您的语言。我在视图中使用以下代码:

+ (BOOL)isEnglishLanguage
{
    return !language;
}

+ (void)setLanguage:(Language)lang
{
    language = lang;
    [GeneralUtilities storeObjectInUserDefaults:@(language) WithKey:@"language"];
}

+ (NSString *)currentLanguage
{
    if(language == ENGLISH)
    {
        return kLanguageEnglish;
    }
    else if(language == ARABIC)
    {
        return kLanguageArabic;
    }
    return @"";
}

+ (NSString *) NSLocalizedStringCustom:(NSString*) key
{
    NSString *path;
    if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageEnglish])
        path = [[NSBundle mainBundle] pathForResource:kLanguageEnglish ofType:@"lproj"];
    else if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageArabic])
        path = [[NSBundle mainBundle] pathForResource:kLanguageArabic ofType:@"lproj"];

    NSBundle* languageBundle = [NSBundle bundleWithPath:path];
    NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
    return str;
}

+ (NSTextAlignment) NSLocalizedTextFieldAllingment
{
    if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageEnglish])
        return NSTextAlignmentLeft;
    else if([[LanguageUtilities currentLanguage] isEqualToString:kLanguageArabic])
        return NSTextAlignmentRight;
    else  return NSTextAlignmentLeft;
}

我希望它也能对你有用。

请避免这样做。应用内语言切换是一种令人困惑的体验,因为您的用户希望他们的应用遵循设置应用中的配置,而不是您自己的配置

与这里的一些答案相反,如果您选择沿着此路径走,您的布局将不会自动变为从右到左,您还将遇到诸如您正在使用的任何数字或日期格式化程序之类的问题,并且您呈现的任何系统UI(如UIActivityViewController)也不会遵循此覆盖


相反,您应该坚持使用尽可能多的API–UIKit、NSLocalizedString和Auto Layout使您能够无缝地遵循系统UI语言,而不必求助于NSUserDefaults上未记录的黑客攻击。

为什么要实现应用内语言选择器?这将使您的用户感到困惑,因为他们希望所有应用程序都遵循设置应用程序中的配置,而不是您自己的配置。不幸的是,这不适用于RTL UI,也不适用于应用程序提供的任何格式化程序或系统UI。