如何将iOS中的所有UIView从左移到右? (目标C)

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

我的要求是当我select英文时,所有的UIView应该从左到右显示。
(即在左边UIImageView右边有一个UIImageViewUILabel ,见下图)

但是,当用户select阿拉伯语言,那么UIImageView应该来到屏幕的右侧, UILabel应该来到UIImageView的左侧。

是否有可能在iOS或我应该创build阿拉伯语言的separte ViewController布局?

在这里我需要改变我的布局

在这里输入图像说明

本地化有两种方式,

  • 本地化 – 您可以使用单个故事板来做到这一点,您只需仔细设置前导空间和尾部空间约束,并且在更改语言时,操作系统将负责制作视图英文版的镜像(特别是对于RTL语言) 。 这是如何工作的,当你从设备设置改变语言,然后当你启动应用程序,iOS检查所选语言,然后加载该特定语言的故事板,但在你的情况下,你必须提供语言更改function在应用程序本身,那么你必须编写一些额外的代码来改变飞行中的语言。

  • 创build单独的故事板 – 第二个是为每种语言创build单独的故事板,并首先devise英语语言屏幕,然后将其复制并粘贴在阿拉伯语故事板中,然后将组件转换为镜像。

注意:

在这两种方式中,您都提供用户在应用程序本身中更改应用程序语言,因此您必须采取一些额外的工作,因为本地化事件的默认行为是您需要重新启动应用程序以查看效果,并且应用程序语言将当你改变设备语言时,改变你不能简单的改变语言,看到UI的变化发生,这不会发生。

所以你在编码方面做了什么来改变应用程序中的语言,用户应该能够看到所select语言的UI在下面解释,

哪个更好?

如果应用程序具有简单的用户界面,也有很小的范围,那么你可以去为多语言单故事板的本地化。

但如果应用程序有复杂的用户界面和应用程序的范围也相当大,那么我build议你去单独的故事板,因为使用本地化有一定的局限性,或者我们可以说为复杂的用户界面设置约束是非常棘手的,如果你被卡在UI部分,那么可能需要更多的时间,这不是在使用单独的故事板的情况下,因为你可以很容易地进行更改。

现在让我们看看一些代码,

下面是两个故事板之间切换的代码,

 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]; } 

这是在本地化情况下重新实例化故事板的代码(以及在应用程序本身中更改语言),

 //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]; } 

注意:

提供应用程序语言更改function不被Apple推荐,因为它可能会导致设备select语言和应用程序语言之间的混淆,但如果这是您的要求,并且您必须这样做,那么select是您的select。

希望它可以帮助你。

它已经为你完成了。 使用Autolayout来创build你的UI( NSLayoutConstraint )。 在创build水平视图层次结构时,使用NSLayoutAttributeLeadingNSLayoutAttributeTrailing属性。 首先将对应英文设备区域设置的左边缘和阿拉伯语的右边缘。 反之亦然

查看本教程了解更多信息https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html

最好的办法是用NSLayoutConstraint来pipe理它。 请参考下面的伪码:

 - (void)createConstraints { /* Constraint creation methods. See comments in each method for more detail. */ [self createCompactConstraints]; [self createRegularConstraints]; /* Activate a set of constraints for initial layout. */ [NSLayoutConstraint activateConstraints: rightSideConstraint]; [NSLayoutConstraint activateConstraints: leftSideConstraint];} - (void)createLeftConstraints { /* Use NSLayoutConstriant class to implement the layout for the required label. */} - (void)createRightConstraints { /* Use NSLayoutConstriant class to implement the layout for the required label. */} - (void)changeLayout{ if(!Arabic){ /* Deactivate left to right label constraint Activate right to left label constraint */ } else{ /* Deactivate right to left label constraint Activate left to right label constraint */ } }