How to center an image inside an UIButton without stretching in both direction in Swift?

28,378

Solution 1

Finally a solution came through. You must set the content mode for the image inside the UIButton.

The solution is to update the contentMode of the Image when you are using a foreground image inside a button along with the contentMode of the UIButton.

shiftButton.contentMode = .Center
shiftButton.imageView?.contentMode = .ScaleAspectFit

Solution 2

If you're using storyboard, double-check that you don't have anything set for the button title.

Solution 3

  • Add User Defined Runtime Attributes to your button.

In the screen shot below value 1 is equal to scaleAspectFit

imageView.ContentMode = scaleAspectFit

enter image description here enter image description here

Solution 4

I was able to center the image by setting the content insets to 0 using the size inspector on the storyboard:

enter image description here

Solution 5

Set the button's content mode to Center:

shiftButton.contentMode = .Center
Share:
28,378
Ariel
Author by

Ariel

Nickname: Ariel Status: Single BY DAY: I write code, play games, go for a walk and eat all the yummy food. BY NIGHT: I sleep like a KiD. FOR FUN: I write code, play games and go for a walk. FOR WORK: I work as a Flutter Developer at Peuconomia Int'l Pvt. Ltd.

Updated on August 01, 2021

Comments

  • Ariel
    Ariel almost 3 years

    I am making a custom keyboard and I need to centre the image of the shift icon inside the shift button. The image is 100px x 100px.

    However, the button frame in portrait is 36pt x 38pt, and in landscape, it is 68pt x 32pt. I have tried using button image inset property to centre the image. However, it does not does so.

    I tried myself and set the image edge insets to (25,25,25,25), the image centres in both sizes. However, the icon becomes too small to see.

    shiftButton.setImage(UIImage(named: "shift"), forState: .Normal)
    
    shiftButton.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,0)
    

    I am making the button programatically. And, I need the button to scale maintaining its aspect ratio i.e. 1:1. Its maximum width or height is always tied to the button's height itself. The image width/height should be maximum of button's height. And, it should not stretch in any way to distort the icon. However, the button itself can stretch.

    I need the image to scale according to button frame but maintain its aspect ratio. And, it can down scale or up scale, but should always maintain the 1:1 aspect ratio.

    Any suggestions for solving this problem?