Ich habe eine UIButton-Instanz mit dem Namen "button" mit einem Bild erstellt [UIButton setImage:forState:]
. Der button.frame ist größer als das Bild.
Jetzt möchte ich das Bild dieser Schaltfläche verkleinern. Ich habe versucht button.imageView.frame
, mich zu ändern , button.imageView.bounds
und button.imageView.contentMode
, aber alle scheinen unwirksam.
Kann mir jemand helfen UIButton
, die Bildansicht von a zu skalieren?
Ich habe folgendes erstellt UIButton
:
UIButton *button = [[UIButton alloc] init];
[button setImage:image forState:UIControlStateNormal];
Ich habe versucht, das Bild folgendermaßen zu skalieren:
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
button.imageView.bounds = CGRectMake(0, 0, 70, 70);
und das:
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
button.imageView.frame = CGRectMake(0, 0, 70, 70);
Ich hatte ein ähnliches Problem, bei dem ich ein Hintergrundbild (eines mit Rand) und ein Bild (Flagge) für eine benutzerdefinierte Schaltfläche habe. Ich wollte, dass die Flagge verkleinert und in der Mitte ist. Ich habe versucht, das Attribut von imageView zu ändern, war jedoch nicht erfolgreich und habe dieses Bild gesehen.
Während meiner Experimente habe ich versucht:
Ich habe das erwartete Ergebnis erzielt als:
quelle
Eine zusätzliche Möglichkeit zur Konfiguration in einer XIB-Datei. Sie können diese Option auswählen, wenn Sie möchten, dass Text oder Bild die vollständige Ausfüllung in UIButton skalieren. Mit Code wird es genauso sein.
quelle
verwenden
nicht
Aktualisieren:
Wie @Chris kommentierte,
quelle
quelle
Ich habe diese Lösung gefunden.
1) Unterklasse der folgenden Methoden von
UIButton
Und es funktioniert gut.
quelle
Seltsam, die einzige Kombination, die für mich (iOS 5.1) funktioniert hat, ist ...
button.imageView.contentMode = UIViewContentModeScaleAspectFit;
und
[button setImage:newImage forState:UIControlStateNormal];
quelle
Ich bin gerade auf dasselbe Problem gestoßen, und diese Frage enthält eine mögliche Antwort:
Warum wird die Größe eines benutzerdefinierten UIButton-Bilds im Interface Builder nicht geändert?
Verwenden Sie stattdessen im Wesentlichen die Eigenschaft backgroundimage, die skaliert wird.
quelle
Tun Sie es einfach (vom Design oder vom Code):
Vom Design
[Für Punkt 3: Ändern Sie die horizontale und vertikale Ausrichtung auf
UIControlContentHorizontalAlignmentFill and UIControlContentVericalAlignmentFill]
Aus dem Code
quelle
So kann Ihr Problem gelöst werden:
quelle
Von einem kleinen Test, den ich gerade nach dem Lesen hier gemacht habe, hängt davon ab, ob Sie setImage oder setBackgroundImage verwenden. Beide haben das gleiche Ergebnis erzielt und das Bild gestreckt
quelle
quelle
Dies funktioniert auch, da das backgroundImage automatisch skaliert
[button setBackgroundImage:image forState:UIControlStateNormal];
quelle
Storyboard
Sie müssen bestimmte Eigenschaft definieren in Runtime - Attribute von Inspektoren Identität -
imageView.contentModel
, wo Sie Wert relativ zurawValue
Position von ENUMUIViewContentMode
. 1 bedeutet scaleAspectFit .Und die Ausrichtung der Schaltfläche im Attributinspektor :
quelle
Ich kann keine Lösung von _imageView verwenden lassen, aber ich kann eine verwenden
CGContextRef
, um sie zu lösen. Es benutzt dieUIGraphicsGetCurrentContext
das currentContextRef abgerufen und ein Bild in currentContextRef gezeichnet. Anschließend wird das Bild skaliert oder gedreht und ein neues Bild erstellt. Aber es ist nicht perfekt.der Code:
quelle
Ich hoffe, das kann jemand anderem helfen:
Swift 3+
quelle
Sie können imageView mithilfe der benutzerdefinierten UIButton-Klasse ändern. Bitte sehen Sie meine Antwort. https://stackoverflow.com/a/59874762/5693826
quelle
Jeder UIButton hat eine eigene versteckte UIImageView. Also müssen wir den Inhaltsmodus wie folgt einstellen ...
quelle
Unten links im Screenshot sehen Sie die Dehnungseigenschaften. Versuchen Sie es mit diesen.
quelle