change buttons ios uibutton autolayout uiedgeinsets

ios - buttons - Cómo cambiar el relleno UIButton predeterminado cuando se utiliza el diseño automático



uicontrol swift (2)

Me doy cuenta de que publiqué esta pregunta hace más de dos años, pero quería hacer un seguimiento y observar que la propiedad contentEdgeInsets ahora parece funcionar correctamente con la reproducción automática. Por ejemplo, el siguiente código produce un botón con un margen de 20 píxeles alrededor de su contenido:

button.contentEdgeInsets = UIEdgeInsetsMake(20, 20, 20, 20);

Cuando se utiliza el diseño automático en iOS 6, el tamaño de contenido intrínseco de un UIButton parece incluir aproximadamente 10px de relleno alrededor del texto del botón. ¿Hay alguna manera de controlar este valor de relleno? Por ejemplo, me gustaría poder hacer algo como esto, que establecería el relleno en 5px en cada lado:

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

He intentado configurar contentEdgeInsets, titleEdgeInsets e imageEdgeInsets, todo en vano. Curiosamente, la especificación de un valor negativo a la izquierda o derecha en contentEdgeInsets parece tener algún efecto, pero no superior o inferior.

De cualquier manera, me gustaría poder especificar el valor de relleno real como un número positivo, no un ajuste al valor predeterminado expresado como un número negativo. ¿Alguien sabe si esto es posible?


No estoy seguro de si puede hacer esto sin subclasificar UIButton. Si está dispuesto a crear una subclase, anular este método podría hacer el truco (no lo he intentado):

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