it-swarm.com.de

Wie passe ich die Bildgröße eines UIButton an?

Wie kann ich die Bildgröße des UIButton anpassen? Ich stelle das Bild so ein:

[myLikesButton setImage:[UIImage imageNamed:@"icon-heart.png"] forState:UIControlStateNormal];

Wie kann ich das Bild verkleinern?

132
adit

Wenn ich richtig verstehe, was Sie versuchen zu tun, müssen Sie mit den Schaltflächen Bild Randeinfügung spielen. So etwas wie:

myLikesButton.imageEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right);
213
Tim C

Tims Antwort ist richtig, ich wollte jedoch einen weiteren Vorschlag hinzufügen, da es in meinem Fall insgesamt eine einfachere Lösung gab.

Ich habe versucht, die UIButton Bildeinsätze festzulegen, da ich nicht wusste, dass ich den Inhaltsmodus für das UIImageView der Schaltfläche festlegen kann, wodurch die Verwendung von UIEdgeInsets und der Verwendung von fester Codierung verhindert worden wäre Werte zusammen. Greifen Sie einfach auf die zugrunde liegende Bildansicht über die Schaltfläche zu und stellen Sie den Inhaltsmodus ein:

myButton.imageView.contentMode = UIViewContentModeScaleAspectFit;

Siehe IButton hört die Einstellung des Inhaltsmodus nicht ab?

Swift 3

myButton.imageView?.contentMode = .scaleAspectFit
86
Kyle Clegg

Swift 3:

button.setImage(UIImage(named: "checkmark_white"), for: .normal)
button.contentVerticalAlignment = .fill
button.contentHorizontalAlignment = .fill
button.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
25
Josh O'Connor

sie können die Eigenschaft imageEdgeInsets verwenden. Der Einfüge- oder Ausgangsrand für das Rechteck um das Bild der Schaltfläche.

 [self.btn setImageEdgeInsets:UIEdgeInsetsMake(6, 6, 6, 6)];

Ein positiver Wert verkleinert oder fügt diesen Rand ein - bewegt sich. Ein negativer Wert erweitert diese Kante oder setzt sie außer Kraft.

23
safaa elgendi

Wenn Ihr Bild zu groß ist (und Sie das Bild nicht nur verkleinern möchten/können), eignet sich eine Kombination der ersten beiden Antworten hervorragend.

addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(15.0, 15.0, 15.0, 5.0)

Wenn Sie die Bildeinfügungen nicht genau richtig einstellen, wird das Bild verzerrt, ohne dass das contentMode geändert wird.

19
iosjillian

Hier ist die Swift Version:

myButton.imageEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
15
Esqarrouth

Swift 4

Sie müssten diese beiden Codezeilen in dieser bestimmten Reihenfolge verwenden. Sie müssen lediglich den oberen und unteren Wert der Edge-Einfügungen ändern.

addButton.imageView?.contentMode = .scaleAspectFit
addButton.imageEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 10.0, 0.0)
7
Van Du Tran

Mit Hilfe von Antwort von Tim C konnte ich mit Swift) eine Erweiterung für UIButton erstellen, mit der Sie den Bildrahmen mit angeben können Die Funktion .setImage() mit einem zusätzlichen Parameter frame

extension UIButton{

    func setImage(image: UIImage?, inFrame frame: CGRect?, forState state: UIControlState){
        self.setImage(image, forState: state)

        if let frame = frame{
            self.imageEdgeInsets = UIEdgeInsets(
                top: frame.minY - self.frame.minY,
                left: frame.minX - self.frame.minX,
                bottom: self.frame.maxY - frame.maxY,
                right: self.frame.maxX - frame.maxX
            )
        }
    }

}

Wenn Sie mit dieser Option den Rahmen eines UIButton auf CGRectMake(0, 0, 64, 64) und das Bild davon auf myImage mit einem Rahmen von CGRectMake(8, 8, 48, 48) setzen möchten, Du könntest benutzen

let button: UIButton = UIButton(frame: CGRectMake(0, 0, 64, 64))
button.setImage(
    myImage,
    inFrame: CGRectMake(8, 8, 48, 48),
    forState: UIControlState.Normal
)
7
Jojodmo

Beachten Sie beim Ändern der Symbolgröße mit UIEdgeInsetsMake(top, left, bottom, right) die Abmessungen der Schaltflächen und die Fähigkeit von UIEdgeInsetsMake, mit negativen Werten zu arbeiten, als wären sie positiv.

Beispiel: Zwei Buttons mit Höhe 100 und Seitenverhältnis 1: 1.

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)

enter image description here

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(45, 0, 45, 0)

enter image description here

left.imageEdgeInsets = UIEdgeInsetsMake(40, 0, 40, 0)
right.imageEdgeInsets = UIEdgeInsetsMake(60, 0, 60, 0)

enter image description here

Die Beispiele 1 und 3 sind identisch, da ABS (100 - (40 + 40)) = ABS (100 - (60 + 60))

6
Borys Tkachenko

Ein Ansatz besteht darin, die Größe des UIImage in Code wie folgt zu ändern. Hinweis: Dieser Code wird nur nach Höhe skaliert, aber Sie können die Funktion auch problemlos nach Breite skalieren.

let targetHeight = CGFloat(28)
let newImage = resizeImage(image: UIImage(named: "Image.png")!, targetHeight: targetHeight)
button.setImage(newImage, for: .normal)

fileprivate func resizeImage(image: UIImage, targetHeight: CGFloat) -> UIImage {
    // Get current image size
    let size = image.size

    // Compute scaled, new size
    let heightRatio = targetHeight / size.height
    let newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio)
    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height)

    // Create new image
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0)
    image.draw(in: rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    // Return new image
    return newImage!
}
2
Crashalot

Schnell 3

Ich habe die Breite und Höhe von myButton auf 40 gesetzt und die Polsterung von EdgeInsetsMake beträgt 15 Seiten. Ich schlage vor, Ihrer Schaltfläche eine Hintergrundfarbe hinzuzufügen, um die tatsächliche Polsterung zu sehen.

myButton.backgroundColor = UIColor.gray // sample color to check padding
myButton.imageView?.contentMode = .scaleAspectFit
myButton.imageEdgeInsets = UIEdgeInsetsMake(15, 15, 15, 15)
1
Drey

Aktualisiert für Swift

yourButtonName.imageEdgeInsets = UIEdgeInsetsMake(10, 10, 10, 10)
1
iAj

Hier ist die andere Lösung, um imageView von UIButton zu skalieren.

button.imageView?.layer.transform = CATransform3DMakeScale(0.8, 0.8, 0.8)
0
ovo