Mise en page automatique + RTL + UILabel l'alignement du texte
Je suis enfin en train de tour à la lutte avec Mise en page Automatique et n'arrive pas à comprendre comment obtenir de droite à gauche (RTL) le soutien au travail de la façon dont je m'attend/vous...
J'ai conçu la vue dans Interface Builder, comme indiqué:
Résultant de l'application qui s'exécute comme prévu lors de l'utilisation de l'anglais:
Toutefois, lorsque vous passez à un RTL langue (l'arabe dans ce cas), la totalité de la vue flips (qui est excellent), mais le UILabel
texte est toujours aligné à gauche. Je m'attends à être aligné à droite de la garder contre le UIImageView
.
Clairement, je suis en manque de quelque chose et/ou ce n'est pas concernée par la Mise en page Automatique.
Suis-je censé définir la textAlignment
manuellement lors de l'utilisation d'un RTL langue?
- Je ne pense pas que les changements de mise en page automatique les états internes des éléments qu'il énonce. Dans ce cas, oui - le meilleur pari que vous avez besoin de le faire manuellement.
- pouvez-vous me dire comment vous avez flip, le point de vue à l'aide de Disposition Automatique ?
- c'est fait automatiquement par le système lors de la modification d'une langue de droite à gauche.
- Je viens d'utiliser la base de storyboard, pas plus de storyboard pour l'arabe, comment est-ce que votre Xcode qu'il doit retourner le voir ? avez-vous conçu le retourné de l'interface dans une autre langue arabe localisée storyboard ou que vous venez d'utilisation 1 table de montage séquentiel pour les deux anglais & arabe ?
- C'est tous en un seul storyboard. Je crois que Xcode configure pour retourner pour le RTL par défaut. Mais assurez-vous d'avoir le "Respect de la langue en direction de" cochée sur la principale contrainte attributs de l'inspecteur.
- Comment tu fais la mise en miroir de l'INTERFACE utilisateur? Si en dehors de changer la langue.S'il vous plaît, laissez-moi savoir.
- Elle est fournie par le placement Automatique, lorsque vous changez la langue dans les Paramètres de l'application à un RTL langue, il sera le miroir de l'INTERFACE utilisateur.
- quelle a été la solution pour cela?
- cela dépend de vos besoins spécifiques, si vous êtes heureux d'avoir la largeur de l'étiquette sur la base de sa intrinsèque de la taille du contenu, puis DarthMike réponse est le meilleur (et en fait, j'ai été tenté d'accepter que). Toutefois, si vous avez besoin de la largeur de l'étiquette de rester comme indiqué, vous devrez aller en bas de la route de NSTextAlignmentNatural comme mentionné dans les deux Ken réponse et perso. Je n'ai pas essayé sur iOS 7+ (je aller avec intrinsicContentSize).
- merci, IB il semble que la seule façon de définir l'alignement naturel est d'utiliser attribué chaîne
- Même type d'exigence est cette mine. Comment dois-je faire de mise en page automatique
- comment atteindre à l'aide de autoresize ou sans mise en page automatique
Vous devez vous connecter pour publier un commentaire.
Vous voulez
NSTextAlignmentNatural
. Qu'en déduit l'alignement du texte à partir de l'chargé de l'application de la langue (pas à partir du script).Pour iOS 9 et plus tard (en utilisant Xcode 7), vous pouvez le régler dans le storyboard (choisissez l' --- option d'alignement). Si vous avez besoin de cibler les versions précédentes, vous aurez besoin de créer une prise de courant à l'étiquette et à définir l'alignement dans
awakeFromNib
.Pour moi, ces solutions n'ont pas les aider, et j'ai fini par faire quelque chose d'assez moche mais c'est le seul qui a fait le tour pour moi. Je l'ai ajouté comme un
NSString
catégorie:NSString+Extras.h:
NSString+Extras.m:
Pour détecter la langue que j'ai utilisé cette SORTE de réponse.
setTextAlignment:NSTextAlignmentNatural
mais de mon expérience, il ne fonctionne pas comme il devrait, et ma solution, mais ce n'est pas "propre", des œuvres; il aligne le texte à l'intérieur de façon naturelle, indépendamment de la langue du système. Ce que vous voulez, c'est quelque chose comme "système-lang alignement", ce qui n'est pas "l'alignement naturel".Je pense que vous ne souhaitez pas utiliser l'alignement du texte dans ce cas, pour une étiquette.
Vous pouvez simplement laisser la largeur déterminée par intrinsicContentSize, et de supprimer toute la largeur de contraintes sur l'étiquette. Vous allez obtenir l'effet désiré de l'étiquette de texte aligné à la vue.
Pour l'axe x, vous n'avez besoin de cette contrainte entre l'étiquette et imageview:
[imageview]-[label]
Ce n'est qu'un espacement horizontal de contrainte. Pas de tête ou en queue de superview.
Suivi de Ken réponse
Réglage
textAlignment
àNSTextAlignmentNatural
n'est pas possible surUILabel
, il en résultera une exception se faire jeter:Il fonctionne lors de l'utilisation attribué texte et ce peut être définie dans Interface Builder, comme indiqué:
Cependant, il semblerait que attribuée texte n'est pas ramassés lors de la localisation de la table de montage séquentiel.
Pour contourner ce problème, j'ai quitté le
UILabel
configuré en tant que simple dans Interface Builder et créé unNSAttributedString
avec le texte de l'étiquette, définissez l'alignement sur l'attribuée chaîne et de l'attribuer à l'étiquette duattributedText
propriété:Cela fonctionne bien dans ce cas simple, mais je peux le voir tomber quand vous avez besoin de plus complexe attribué chaîne de style. Mais, évidemment, dans ce cas, vous auriez probablement juste utiliser
NSLocalizedString
ou de son équivalent lors de la création de laNSAttributedString
.UILabel
à attribué dans mon storyboard ne semble pas fonctionner sur iOS7 avec le texte hébreu... des idées? (J'ai fait en sorte que le texte est disponible et est correct avec l'hébreu caractères uniquement au moment de l'exécution de ces lignes dans monviewWillAppear
)@Aviel réponse comme une swift UILabel extension
Comment l'utiliser ?
vous pouvez utiliser Monmodèle à la facilité de soutien de RTL et du métro léger.
Cette fonction m'a aidé
@Aviel réponse comme une swift 4 UILabel extension
utilisation