gpt4 book ai didi

ios - 如何在 iOS 中将所有 UIView 从左移到右? ( objective-C )

转载 作者:行者123 更新时间:2023-11-29 11:57:02 25 4
gpt4 key购买 nike

我正在开发支持英语和阿拉伯语的应用程序。

我的要求是当我选择英文时,所有的UIView应该从左到右显示。
(即在左侧有一个 UIImageViewUIImageViewRight UILabel,见图下)

但是当用户选择阿拉伯语时,UIImageView 应该出现在屏幕的右侧,UILabel 应该出现在 UIImageView 的左侧。

是否可以在 iOS 中执行,或者我应该为阿拉伯语创建单独的 ViewController 布局????

这里我需要更改我的布局

enter image description here

最佳答案

本地化有两种方式,

  • 本地化- 您可以使用单个 Storyboard来实现,您只需仔细设置前导空格和尾随空格限制,当您更改语言时,操作系统会负责制作英文版 Views 的镜像(尤其是 RTL 语言)。这是如何工作的,当您从设备设置更改语言然后启动应用程序时,iOS 会检查所选语言,然后加载该特定语言的 Storyboard,但在您的情况下,您必须提供语言更改功能在应用程序本身中,您必须编写一些额外的代码来即时更改语言。

  • 创建单独的 Storyboard- 第二个是为每种语言创建单独的 Storyboard,并首先为英语设计屏幕,然后将其复制并粘贴到阿拉伯语 Storyboard中,然后移动组件制作相同的镜像。

注意:

在这两种方式中,您都为用户提供了更改应用程序本身的应用程序语言的能力,因此您必须付出一些额外的努力,因为本地化的默认行为是您需要重新启动应用程序才能看到效果和当您更改设备语言时,应用程序语言也会更改,您不能简单地即时更改语言并看到 UI 发生变化,这是不会发生的。

因此,您必须在编码部分做些什么才能更改应用程序中的语言,并且用户应该能够看到所选语言的 UI,如下所述,

哪种方法更好?

如果该应用具有简单的 UI 并且范围较小,那么您可以进行本地化,即针对多种语言的单个 Storyboard。

但是如果应用程序具有复杂的用户界面并且应用程序的范围也相当大,那么我建议您使用单独的 Storyboard,因为使用本地化有一些限制,或者我们可以说为复杂的用户界面设置约束是棘手的,如果您卡在 UI 部分,那么可能会花费更多时间,使用单独的 Storyboard不会出现这种情况,因为您可以根据需要轻松进行更改。

现在让我们看一些代码,

下面是两个 Storyboard之间切换的代码,

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

if ([kGetSelectedLanguage isEqualToString:kEnglish]) { //Load Arabic Storyboard

[sender setSelected:NO];

// Get English Language Storyboard
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Arabic" bundle:nil];

// Create Navigation controller with RootViewController
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[storyBoard instantiateViewControllerWithIdentifier:@"YourRootViewController"]];

// Set Windows RootViewController
[appDelegate.window setRootViewController: navigationController];

[[NSUserDefaults standardUserDefaults] setObject:kArabic forKey:kSelectedLanguage];

[[NSUserDefaults standardUserDefaults] synchronize];

} else { //Load English Storyboard

[sender setSelected:YES];

// Get English Language Storyboard
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"English" bundle:nil];

// Create Navigation controller with RootViewController
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[storyBoard instantiateViewControllerWithIdentifier:@"YourRootViewController"]];

// Set Windows RootViewController
[appDelegate.window setRootViewController: navigationController];

[[NSUserDefaults standardUserDefaults] setObject:kEnglish forKey:kSelectedLanguage];

[[NSUserDefaults standardUserDefaults] synchronize];
}

这是在本地化(并更改应用程序本身的语言)的情况下重新实例化 Storyboard的代码,

//Change language to English
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[delegate setCountryLanguageCode:@"US" AndLanguageCode:@"en"];

//Change language to Arabic
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[delegate setCountryLanguageCode:@"EG" AndLanguageCode:@"ar"];

//Re-instantiate the storyboard
-(void)setCountryLanguageCode:(NSString *)countryCode AndLanguageCode:(NSString *)languageCode{
[NSBundle setLanguage:languageCode];
UIStoryboard *storyRef = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
self.window.rootViewController = [storyRef instantiateInitialViewController];
}

注意:

Apple 不推荐提供应用内语言更改功能,因为这可能会导致设备选择的语言与应用程序语言之间的混淆,但如果这是您的要求并且无论如何您都必须这样做,那么选择权在您。

希望对你有帮助。

关于ios - 如何在 iOS 中将所有 UIView 从左移到右? ( objective-C ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38631740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com