Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change default UIButton padding when using auto-layout

When using auto-layout in iOS 6, a UIButton's intrinsic content size appears to include about 10px of padding around the button text. Is there any way to control this padding value? For example, I'd like to be able to do something like this, which would set the padding to 5px on each side:

[button setPadding:UIEdgeInsetsMake(5, 5, 5, 5)];

I have tried setting contentEdgeInsets, titleEdgeInsets, and imageEdgeInsets, all to no avail. Oddly, specifying a negative left or right value in contentEdgeInsets appears to have some effect, but not top or bottom.

Either way, I'd like to be able to specify the actual padding value as a positive number, not an adjustment to the default expressed as a negative number. Anyone know if this is possible?

like image 665
Greg Brown Avatar asked Jun 12 '13 18:06

Greg Brown


2 Answers

I realize that I posted this question over two years ago, but I wanted to follow up and note that the contentEdgeInsets property now appears to work correctly with autolayout. For example, the following code produces a button with a 20-pixel margin around its content:

button.contentEdgeInsets = UIEdgeInsetsMake(20, 20, 20, 20);
like image 130
Greg Brown Avatar answered Nov 11 '22 02:11

Greg Brown


I'm not sure if you can do this without subclassing UIButton. If you are willing to subclass, overriding this method might do the trick (I have not tried this):

- (UIEdgeInsets)alignmentRectInsets { return UIEdgeInsetsMake(5, 5, 5, 5); }

like image 3
Doug McBride Avatar answered Nov 11 '22 02:11

Doug McBride