Ich habe einen UIButton
mit Text "Explore the App" und UIImage
(>) Interface Builder
darin sieht es aus wie:
[ (>) Explore the app ]
Aber ich muss dies UIImage
NACH dem Text platzieren:
[ Explore the app (>) ]
Wie kann ich das UIImage
nach rechts bewegen ?
ios
iphone
cocoa-touch
uibutton
imageedgeinsets
Pavel Yakimenko
quelle
quelle
Antworten:
Meine Lösung dafür ist ganz einfach
quelle
Ab iOS 9 scheint es ein einfacher Weg zu sein, dies zu erreichen, indem die Semantik der Ansicht erzwungen wird.
Oder programmgesteuert mit:
quelle
semanticContentAttribute
in unserer Layoutlogik zu überschreiben , anstatt sichsemanticContentAttribute
selbst zu ändern . (Änderung des semantischen Ansatzes, wird mit der Internationalisierung nicht gut funktionieren)Stellen Sie das
imageEdgeInset
und eintitleEdgeInset
, um die Komponenten in Ihrem Bild zu verschieben. Sie können auch eine Schaltfläche mit den Grafiken in voller Größe erstellen und diese als Hintergrundbild für die Schaltfläche verwenden (danntitleEdgeInsets
zum Verschieben des Titels verwenden).quelle
Die Antwort von Raymond W ist hier am besten. Unterklasse UIButton mit benutzerdefinierten layoutSubviews. Hier ist eine layoutSubviews-Implementierung, die für mich sehr einfach funktioniert hat:
quelle
Was ist mit Unterklassen
UIButton
und ÜberschreibenlayoutSubviews
?Dann Nachbearbeitung der Standorte von
self.imageView
&self.titleLabel
quelle
Eine andere einfache Möglichkeit (das ist NICHT nur iOS 9) besteht darin, UIButton in Unterklassen zu unterteilen, um diese beiden Methoden zu überschreiben
contentEdgeInsets
wird bereits mit super berücksichtigt.quelle
Das Erzwingen von "von rechts nach links" für die Schaltfläche ist keine Option, wenn Ihre App sowohl "von links nach rechts" als auch "von rechts nach links" unterstützt.
Die Lösung, die für mich funktioniert hat, ist eine Unterklasse, die der Schaltfläche im Storyboard hinzugefügt werden kann und gut mit Einschränkungen funktioniert (getestet in iOS 11):
Wobei "Auffüllen" der Abstand zwischen dem Titel und dem Bild ist.
quelle
.forceRightToLeft
ist eine Option! Verwenden Sie einfach den entgegengesetzten Wert (.forceLeftToRight
), wennUIApplication.shared.userInterfaceLayoutDirection == .rightToLeft
.In Swift:
quelle
Aufbauend auf der Antwort von @split ...
Die Antwort ist fantastisch, ignoriert jedoch die Tatsache, dass die Schaltfläche möglicherweise benutzerdefinierte Bild- und Titelkanteneinfügungen enthält, die zuvor festgelegt wurden (z. B. im Storyboard).
Beispielsweise möchten Sie möglicherweise, dass das Bild oben und unten im Container etwas aufgefüllt ist, das Bild jedoch weiterhin auf die rechte Seite der Schaltfläche verschoben wird.
Ich habe das Konzept mit dieser Methode erweitert:
quelle
Dadurch wird eine rechtsbündige Schaltfläche erstellt, wie folgt:
Die Schaltfläche passt die Breite nicht an den jeweiligen Kontext an, sodass links neben dem Etikett Platz angezeigt wird. Sie können dies lösen, indem Sie die Rahmenbreite der Schaltfläche aus der buttonLabelSize.width und der buttonImageSize.width berechnen.
quelle
quelle
Diese Lösung funktioniert mit iOS 7 und höher
Unterklasse UIButton
Verwendung (irgendwo in Ihrer Klasse):
quelle
Aufbauend auf früheren Antworten. Wenn Sie einen Abstand zwischen dem Symbol und dem Titel der Schaltfläche haben möchten, muss der Code ein wenig geändert werden, um zu verhindern, dass die Beschriftung und das Symbol über die Grenzen von Schaltflächen mit intrinsischer Größe schweben.
Die letzte Codezeile ist wichtig für die Berechnung der Inhaltsgröße für das automatische Layout.
quelle
Hier ist meine eigene Art, die Sache zu machen (nach ungefähr 10 Jahren)
quelle
Einzeilige Lösung in Swift:
quelle