Change a UIButton's text (padding) programmatically in Swift

Still valid for: iOS 12/Xcode 10/Swift 4.2/OSX 10.13.2


iOS 9.1/Xcode 7.1/Swift 2.1/OSX 10.10.5:

The method titleEdgeInsets didn't work for me. My button's frame tightly hugs the text (I didn't specify a frame size), and the frame has a red background color. After doing:

 myButton.titleEdgeInsets = UIEdgeInsetsMake(10,10,10,10)

the red background shrunk inwards by 10 pixels on each side, which meant that now some of the text was outside the red background. Using negative values had no effect on the original frame size.

I was able to get padding around the text, effectively making the frame bigger, by doing:

myButton.contentEdgeInsets = UIEdgeInsetsMake(5,5,5,5) 

iOS 10 and Swift 3 example

Tested and works on IOS 11 and Swift 4.

refineButton.contentEdgeInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)

You can add padding from top, left, right and bottom by doing these lines of code.

button.titleEdgeInsets.left = 10; // add left padding.
button.titleEdgeInsets.right = 10; // add right padding.
button.titleEdgeInsets.top = 10; // add top padding.
button.titleEdgeInsets.bottom = 10; // add bottom padding.