Wie Kann ich einstellen, Lokalisiert Richtung innerhalb der Anwendung?(RTL, wenn der Benutzer wählen, Arabisch, LTR ist die gewählte Sprache ist Englisch)
Meinen Antrag unterstützen müssen Arabisch(rechts-nach-Links-Richtung) und Englisch(Richtung von Links nach rechts) - Sprache, die ich brauche, um UI und basiert auf Benutzer-wählen Sie die Sprache aus meiner Anwendung.
Werde ich umsetzen UI mit NSLayoutConstraint so kann es zu update-Benutzeroberfläche automatisch, basierend auf der führenden und nachfolgende Einschränkungen.
Nun Meine Frage ist wie kann ich das erreichen? Als Mein Gerät-Sprache ist, nämlich die englische, und aus meiner Anwendung, Benutzer wählen Sie " Arabisch(beschränkt auf meine app nur), So dass mein Flow,UI,Animationen etc. sollten von rechts nach Links.
hier sind die Beispiel-snap für die Benutzeroberfläche Richtung
Dank
Ich fand, dass, wenn wir setzen "AppleLanguages" in main.m-Datei, die Zeit, seinen Werken, Aber die Benutzeroberfläche wird aktualisiert, nur nach dem Relaunch der app.
ja, sagte ich, dass in meiner Antwort müssen Sie die app neu starten. und noch einen link für eine app fragt den Benutzer, um die app neu starten.
Warum sind Sie Einstellung Ihrer app auf diese Art und Weise? Gibt es irgendeinen Grund, warum man nicht einfach stützend ausschalten des Gerätes Sprache automatisch?
Eine änderung der Sprache ist nicht von einem Gerät Sprache, seine eingeschränkte app nur. Und das ist mein app-Anforderung, die Benutzer wechseln kann für jede Sprache, zu jeder Zeit. Vielen Dank für Sie Antwort.
InformationsquelleAutor Kanjariya-IOS | 2015-08-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update (iOS 9+)
Lösung Key:
semanticContentAttribute
Einige sagt, dass dieser Weg nicht offiziell und kann zu effizienzverlusten führen.
UI-Richtung gezwungen werden kann, nun ohne die app zu schließen:
Hinweis, bars in iOS 9 kann nicht gezwungen werden, RTL (Navigations-und TabBar). Während es gezwungen, mit iOS 10.
Die einzige Verbleibende Sache, die können nicht gezwungen werden RTL in iOS 10 ist die Standard-Schaltfläche "zurück".
Unter iOS 9
Kurze Antwort:
Apple ' s guide line:
Workarwound:
Beispiel-code zu ändern app Sprache Arabisch:
, Die nicht wirksam werden ohne einen Neustart
So ändern Sie die app Sprache, ohne eine app starten
Lösung ist, um Ihren eigenen Lokalisierungs-Lösung:
ViewController
beginnt, bevor andereViewController
noch bevor Sie Ihr Haupt. ODER verwenden Sie einunwindSegue
zurück zu gehen, um die root-view-controller nach dem ändern der Sprache.viewDidLoad
Methode, die für alle view-Controller.Nicht erfüllen, Punkte 5 und 6. wenn Sie nicht die Unterstützung unter iOS 9
Legen Sie die Einschränkungen für Ihre Ansichten in
viewDidLoad
Methode, die für alle view-Controller.Wenn Sie die Einschränkungen verwenden rechts/Links entsprechend der gewählten Sprache statt leading/trailing.
Sprache Klasse Probe (Swift):
Initialisiert ein Objekt dieser Klasse in Ihrem singlton Klasse.
Sprache Klasse Probe (Objective-c):
Swift-Beispiel bietet eine vollständige Lösung. wir bedauern, dass Sie konvertieren müssen Sie es selbst.
Ich erwähnte in der Antwort, dass: Einige sagt, dass dieser Weg nicht offiziell und kann zu effizienzverlusten führen. Aber, selbst ich habe nicht die Erfahrung das so eine Sache. In meiner Implementierung, die ich nicht ändern Sie das root-Ansicht.
InformationsquelleAutor hasan
@ashwin, ich versuche zu tun, die genau die gleiche Sache wie Sie waren.
Ich hatte gehofft, ich könnte meine app in einer RTL-Sprache (von rechts nach Links), nur durch eine änderung etwas in der info.plist, appdelegate oder wer weiß was. Die Idee ist, dass jemand mit einer LTR-Gerät kann dann meine app in RTL, ändern Sie es innerhalb der app und keine Notwendigkeit, neu zu starten.
Sieht aus wie es ist nicht so eine Sache (bin ich froh, zu hören, wenn jemand nicht einverstanden ist mit dieser). Aber ich habe festgestellt, dass einige Optionen, die sind gar nicht so schlecht.
Es stellt sich heraus, Sie zwingen kann, eine bestimmte Ansicht zu sein, LTR oder RTL verwendet werden. So können Sie diese Eigenschaft festlegen, auf jeder Ansicht der app. Die Art und Weise Sie tun es ist bis zu Ihnen.
selbst.Blick.semanticContentAttribute = UISemanticContentAttributeForceRighttoleft;
Referenz: UISemanticContentAttribute
[view setTransform:CGAffineTransformMakeScale(1, 1)];
Hier ist etwas code, der dir helfen konnte.
Also, wenn Sie ändern einen UIViewController in RTL können Sie machen Sie alle Einstellungen so, dass es reichen würde:
Hinweis: dies ist nicht die Art, wie es sein sollte und die Apple-Richtlinien sagen, dass Sie die Sprache ändern, aus den iOS-Einstellungen. Aber diese Lösung funktioniert, wenn die Sprache geändert werden müssen, innerhalb der app und eine Sprache, die Richtung ändern zwischen LTR und RTL beteiligt ist. Und keine app-reset erforderlich.
Ich hoffe, es half.
Wenn Sie mit dem standard UITableViewCell ohne Unterklassen, die app funktioniert "intelligent" und wird die Größe der Etiketten. Die Lösung wäre, eine Unterklasse der Zelle und erstellen Sie Ihr eigenes layout. Eine weitere option ist, um nur verwandeln die UILabels innerhalb der CellForRow Methode. Ich werde fügen Sie zwei weitere Methoden, auf meine Antwort, die hilfreich sein könnten: BOOL deviceLanguageDirectionEqualAppLanguagedirection() void transformViews(NSArray *views)
Kann man etwas machen wie: if (!deviceLanguageDirectionEqualAppLanguagedirection()) { transformViews (@[- Zelle.contentView, Zelle.textLabel, Zelle.detailTextLabel]); }
InformationsquelleAutor inigo333
Verwenden Sie diese Codezeile wird es tun, Ihre Magie und layout ändern, ohne schließen der Anwendung.
Von rechts nach Links
UIView.appearance().semanticContentAttribute = .forceRightToLeft
Sowie für Rechts-nach-Links-Flip -
und wenn Sie ändern möchten textfield-layout oder text ändern, dann verwenden Sie diesen code, weil ich vor diesem Problem . textfield-Texte war nicht changning layout.
überprüfen Sie, diesen code zu ändern layout der textfield text.
InformationsquelleAutor Shahzaib Maqbool