firstButton ist ein UIButton vom Typ Custom. Ich platziere programmgesteuert drei davon in jeder Zelle einer Tabelle, also:
[firstButton setImage:markImage forState:UIControlStateNormal];
[firstButton setContentMode:UIViewContentModeScaleAspectFit];
[cell.contentView addSubview:firstButton];
An anderer Stelle sage ich es zu clipToBounds. Was ich bekomme, ist ein Ausschnitt des mittleren Quadrats des Bildes und keine aspektskalierte Darstellung. Ich habe dies auf viele Arten versucht, einschließlich des Festlegens der mode-Eigenschaft in firstButton.imageView, was ebenfalls nicht zu funktionieren scheint.
ios
uibutton
contentmode
Dan Ray
quelle
quelle
Antworten:
Ich hatte das gleiche Problem. Ich sehe, dass diese Frage etwas alt ist, aber ich möchte eine klare und korrekte Antwort geben, um anderen Leuten (wie mir) einige Zeit zu ersparen, wenn sie in ihren Suchergebnissen auftaucht.
Ich musste ein bisschen suchen und experimentieren, aber ich fand die Lösung. Stellen Sie einfach den ContentMode der "versteckten" ImageView ein, die sich im UIButton befindet.
Vielleicht hat Dan Ray in seiner akzeptierten Antwort darauf angespielt, aber ich vermute nicht.
quelle
Wenn Sie sich mit dem Bild des UIButton befassen (im Gegensatz zu seinem Hintergrundbild), hat das Festlegen des contentMode auf dem UIButton selbst oder auf seiner imageView keine Auswirkung (trotz der Aussagen anderer Antworten).
Alternativ können Sie dies stattdessen tun:
Oder passen Sie Ihr Bild entsprechend an.
ODER verwenden Sie einfach eine UIImageView (die den ContentMode ordnungsgemäß berücksichtigt) mit einem daran angehängten UITapGestureRecognizer oder einen transparenten UIButton darüber.
quelle
contentMode
auf die ,imageView
wenn Sie irgendeine Art von Aspekt Füllung oder fit machen wollen, wie andere Antworten geklärt haben. Siehe: stackoverflow.com/a/7944316/746890 .Anstatt die Einstellung
contentMode
auf der Schaltfläche selbst, die Sie einstellen möchten werdencontentHorizontalAlignment
undcontentVerticalAlignment
Eigenschaften und (entscheidend) diecontentMode
für die SchaltflächeimageView
für jede Art von Aspekte Füllung oder Passform. Hier ist ein Beispiel:Natürlich können Sie auch andere Dinge tun, z. B. das Bild der Schaltfläche am oberen Rand der Schaltfläche ausrichten. Wenn Sie keine Seitenfüllung oder -anpassung benötigen, können Sie die Ausrichtung einfach selbst festlegen:
In Swift möchten Sie Folgendes verwenden:
Dies funktioniert für alle Versionen von iOS, einschließlich der neuesten Versionen mit automatischem Layout (dh iOS 4 bis iOS 11+).
quelle
Nach ein paar Stunden der Verwirrung habe ich es unter iOS 3.2 zum Laufen gebracht. Wie bereits erwähnt, hat die Verwendung von setBackgroundImage anstelle von setImage die Aufgabe für mich erledigt.
quelle
Die Antwort besteht darin, ein UIImageView mit allen gewünschten Einstellungen für den Inhaltsmodus zu verwenden und dann eine benutzerdefinierte Schaltfläche darüber zu legen. Dumm, dass man das nicht alles auf einmal machen kann, aber es scheint, dass man das nicht kann.
quelle
Habe eine Lösung dafür gefunden. Setzen Sie die
adjustsImageWhenHighlighted
Eigenschaft vonUIButton
aufNO
.Hoffe das hilft. Fühlen Sie sich frei, unten zu kommentieren, ich werde alle Ihre Fragen beantworten.
quelle
Meine Antwort ähnelt der von Kuba. Ich musste mein Bild programmgesteuert einstellen.
quelle
Einzige Lösung, die bei mir funktioniert hat:
quelle
Swift 3
quelle
Versuchen Sie statt setImage setBackgroundImage
quelle
Ich glaube, wir haben hier ein einfaches Problem mit dem Interface Builder - anscheinend ignoriert der IB alle Änderungen im Inhaltsmodus, nachdem Sie die Bildeigenschaft festgelegt haben.
Die Lösung ist so einfach: Stellen Sie den Inhaltsmodus ein, entfernen Sie zuvor festgelegte Bildnamen (stellen Sie sicher, dass Sie sie in allen Zuständen entfernen, Standard, hervorgehoben usw.), und geben Sie dann die gewünschten Bildnamen in allen gewünschten Zuständen erneut ein - et voilà .
quelle
Ich empfehle auch, einen Blick auf die
adjustsImageWhenHighlighted
UIButton
Eigenschaft zu werfen , um seltsame Verformungen des Bildes zu vermeiden, wenn die Taste gedrückt wird.quelle
Als ich versuchte, dies herauszufinden, wurde meine Methode im Laufe der Zeit etwas hackiger, und ich landete in der Unterklasse UIButton und überschrieb setHighlighted:
Für mich funktioniert es, das Bild Alpha einfach auf 0,5 zu reduzieren, da es sich auf einem schwarzen Hintergrund befindet.
Es funktioniert jedoch nur, wenn ich [super setHighlighted:] auskommentiere (wo es scheint, dass der bilddehnungsfähige Code läuft), was einfach nicht der richtige Weg ist, dies überhaupt zu lösen ... alles scheint zu sein funktioniert aber gut. Wir werden sehen, wie es funktioniert, wenn ich weiter daran arbeite.
quelle
Wenn jemand nach einer Antwort sucht, die in iOS 6 und iOS 7 und im Storyboard funktioniert:
Sie können ein Bild in Ihrem Storyboard festlegen:
Und dann:
quelle
Wenn der UIButton die Einstellungen für Layoutbeschränkungen nicht zu hören scheint, überprüfen Sie, ob die Bilder größer als die Schaltflächengröße sind. Verwenden Sie für Retina-Auflösungen immer die Bilder @ 2x und @ 3x.
quelle
Diese beiden Dinge (die anfangs ziemlich schwer zu finden sind) dehnen Ihr UIButton-Bild auf die Größe der Schaltfläche:
man sollte immer versuchen, solche im Storyboard anstatt im Code festzulegen.
quelle