Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS 9 disable support for right-to-left language

Tags:

My iOS app is in Arabic (right-to-left) language only. Prior to iOS 9 the views layout and view animations were all by default left-to-right. So, I had customised the complete app and had reversed the default behaviour e.g. back button in navigation bar was set to be on the right instead of default left.

But now when the app is compiled using latest SDK (Xcode 7 beta 4), everything is the opposite of what I need.

Is there any simple way to force the app to show views and behave like iOS 8 and 7?

I searched and found a solution but it involves changing the constraints(Uncheck the "Respect language direction") for all views. But this is not a feasible solution in large projects.

This is a screenshot after compiling with Xcode 7 beta 4. .

and this is a screenshot when compiled with Xcode 6. enter image description here

like image 316
Abdullah Umer Avatar asked Jul 29 '15 10:07

Abdullah Umer


2 Answers

Edit: The following code may cause unexpected behavior as @wakachamo pointed out. So, please watch out for issues e.g. Interactive pop gesture doesn't work, alertviews don't show, etc. Its better to follow the instruction provided by @wakachamo if this doesn't work for you

Add this to app delegate didFinishLaunchingWithOptions method.

[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];

Also add guard to support earlier version so that the property doesn't cause any crash.

if([[[UIView alloc] init] respondsToSelector:@selector(setSemanticContentAttribute:)]) {
        [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
    }

[[UIView alloc] init] instead of [UIView appearance] because respondsToSelector is not currently working with [UIView appearance] for setSemanticContentAttribute. You can also add iOS 9 Check

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
        [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
    }
like image 176
Kamran Khan Avatar answered Sep 20 '22 19:09

Kamran Khan


i found the correct way from Apple Developer Forums

here iOS 9 beta - UIAlertController is not working

just add this code to make alertview work with it

 if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
            [[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];

    [[UIView appearanceWhenContainedIn:[UIAlertController class], nil] setSemanticContentAttribute:UISemanticContentAttributeUnspecified];
    [[UIView appearanceWhenContainedIn:[UIAlertView class], nil] setSemanticContentAttribute:UISemanticContentAttributeUnspecified];



}
like image 36
iDevSmart Avatar answered Sep 17 '22 19:09

iDevSmart