381 Stimmen

Wie bringe ich das Bild auf der rechten Seite des Textes in einer UIButton?

Ich möchte keine Unteransicht verwenden, wenn ich es vermeiden kann. Ich möchte eine UIButton mit einem Hintergrundbild, Text und einem Bild darin. Wenn ich das tue, befindet sich das Bild auf der linken Seite des Textes. Das Hintergrundbild, der Text und das Bild haben alle einen unterschiedlichen Hervorhebungsstatus.

641voto

Liau Jian Jie Punkte 7011

Die einfachste Lösung:

iOS 10 und höher, Swift:

button.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
button.titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
button.imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)

Vor iOS 10: Swift/Obj-C:

button.transform = CGAffineTransformMakeScale(-1.0, 1.0);
button.titleLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);
button.imageView.transform = CGAffineTransformMakeScale(-1.0, 1.0);

iOS 9 und höher, Swift: (Empfohlen)

button.semanticContentAttribute = .forceRightToLeft

351voto

Benjamin Punkte 7928

Obwohl einige der vorgeschlagenen Antworten sehr kreativ und äußerst clever sind, lautet die einfachste Lösung wie folgt:

button.semanticContentAttribute = UIApplication.shared
    .userInterfaceLayoutDirection == .rightToLeft ? .forceLeftToRight : .forceRightToLeft

So einfach ist das. Als Bonus wird das Bild in Ländern mit Rechts-nach-Links-Ausrichtung auf der linken Seite angezeigt.

EDITAR : Da die Frage schon mehrmals gestellt wurde, ist dies iOS 9 + .

342voto

Victor Rius Punkte 4317

AKTUALISIERT FÜR XCODE 9 (über Interface Builder)

Es gibt einen einfacheren Weg vom Interface Builder .

Wählen Sie den UIButton und wählen Sie diese Option in der Ansicht Dienstprogramme > Semantisch :

left-to-right enter image description here Das war's! Schön und einfach!

OPTIONAL - 2. Schritt:

Wenn Sie den Abstand zwischen dem Bild und dem Titel anpassen möchten, können Sie die Bildausschnitt hier:

enter image description here

Ich hoffe, das hilft!

181voto

Ben Baron Punkte 14189

Die Unterklassifizierung von UIButton ist völlig unnötig. Stattdessen können Sie einfach einen hohen linken Einfügewert für die Bildeinfügungen und einen kleinen rechten Einfügewert für den Titel festlegen. Etwas wie dies:

button.imageEdgeInsets = UIEdgeInsetsMake(0., button.frame.size.width - (image.size.width + 15.), 0., 0.);
button.titleEdgeInsets = UIEdgeInsetsMake(0., 0., 0., image.size.width);

96voto

jasongregori Punkte 11001

Ich gebe Inspirieren48 die Anerkennung für dieses Projekt. Auf der Grundlage seines Vorschlags und der anderen Frage habe ich mir das hier ausgedacht. Subclass UIButton und überschreiben Sie diese Methoden.

@implementation UIButtonSubclass

- (CGRect)imageRectForContentRect:(CGRect)contentRect
{
    CGRect frame = [super imageRectForContentRect:contentRect];
    frame.origin.x = CGRectGetMaxX(contentRect) - CGRectGetWidth(frame) -  self.imageEdgeInsets.right + self.imageEdgeInsets.left;
    return frame;
}

- (CGRect)titleRectForContentRect:(CGRect)contentRect
{
    CGRect frame = [super titleRectForContentRect:contentRect];
    frame.origin.x = CGRectGetMinX(frame) - CGRectGetWidth([self imageRectForContentRect:contentRect]);
    return frame;
}

@end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X