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.
Antworten
Zu viele Anzeigen?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
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 + .
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 :
OPTIONAL - 2. Schritt:
Wenn Sie den Abstand zwischen dem Bild und dem Titel anpassen möchten, können Sie die Bildausschnitt hier:
Ich hoffe, das hilft!
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);
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
- See previous answers
- Weitere Antworten anzeigen