Mon application iOS est uniquement en langue arabe (de droite à gauche). Avant iOS 9, la disposition des vues et les animations des vues étaient toutes par défaut de gauche à droite. Donc, j'avais personnalisé l'application complète et inversé le comportement par défaut, par exemple le bouton de retour dans la barre de navigation a été défini pour être à droite au lieu de gauche par défaut.
Mais maintenant, lorsque l'application est compilée à l'aide du dernier SDK (Xcode 7 beta 4), tout est à l'opposé de ce dont j'ai besoin.
Existe-t-il un moyen simple de forcer l'application à afficher des vues et à se comporter comme iOS 8 et 7?
J'ai cherché et trouvé une solution mais cela implique de changer les contraintes (Décochez la case "Respecter la direction du langage") pour toutes les vues. Mais ce n'est pas une solution réalisable dans les grands projets.
Ceci est une capture d'écran après avoir compilé avec Xcode 7 beta 4.
et ceci est une capture d'écran lorsqu'il est compilé avec Xcode 6.
Modifier: Le code suivant peut provoquer un comportement inattendu comme l'a souligné @wakachamo. Alors, faites attention aux problèmes, par exemple Le geste pop interactif ne fonctionne pas, les alertes ne s'affichent pas, etc. Il vaut mieux suivre les instructions fournies par @wakachamo si cela ne fonctionne pas pour vous
Ajoutez ceci au délégué de l'application méthode didFinishLaunchingWithOptions.
[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
Ajoutez également une protection pour prendre en charge la version antérieure afin que la propriété ne provoque aucun crash.
if([[[UIView alloc] init] respondsToSelector:@selector(setSemanticContentAttribute:)]) {
[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
}
[[UIView alloc] init] au lieu de [UIView apparence] car respondsToSelector ne fonctionne pas actuellement avec [UIView apparence] pour setSemanticContentAttribute. Vous pouvez également ajouter 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];
}
j'ai trouvé la bonne façon de Apple Forums des développeurs
ici iOS 9 beta - UIAlertController ne fonctionne pas
il suffit d'ajouter ce code pour que alertview fonctionne avec
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];
}
Je sais qu'il est trop tard pour répondre. Mais je l'ai compris (Seul le problème de la barre de navigation).
La réponse est adaptée de @Kamran Kan. Merci @Kamran.
Jus remplace le IView par INavigationBar dans la réponse de @ Kamran. alors le code sera le suivant.
#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")) {
[[UINavigationBar appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight];
}
Puisqu'il s'agit uniquement de l'effet UINavigationBar, les autres contrôles ne seront pas appliqués. L'UIAlertView fonctionne donc bien ...
Il n'y a pas de moyen facile. Il est recommandé de migrer vers l'API standard autant que possible à long terme.
Une autre approche consiste à définir semanticContentAttribute
de toutes les vues affectées sur UISemanticContentAttributeForceLeftToRight
, mais cela est tout aussi possible que de définir toutes vos contraintes pour utiliser Gauche/Droite au lieu de Interligne/Traîné. En plus de cela, vous devrez également passer ces appels autour d'un contrôle de disponibilité si vous ciblez iOS <9.
Swift 2 Code
if #available(iOS 9.0, *) {
myView.semanticContentAttribute = .ForceLeftToRight
}
Pour Swift
if #available(iOS 10.0, *) {
UIView.appearance().semanticContentAttribute = .forceLeftToRight
}