2012-04-17 16 views
5

Estoy utilizando una fuente personalizada para el título de un UIButton. Funciona, excepto que con esta fuente en particular se recorta una porción del primer carácter. Por ejemplo:UIButton recortada Título

enter image description here

Intenté fijar los contentEdgeInsets y titleEdgeInsets y parece que no puede conseguir que no se recorta. También intenté establecer la propiedad button.titleLabel.clipsToBounds en NO;

Cualquier sugerencia sería muy apreciada.

Respuesta

8

Así que acabo de configurar el título de UIButton en nil y agregué mi propio UILabel como subvista al UIButton. Configuré el marco UILabel del mismo tamaño que el botón y lo configuré para centrarlo.

No es la solución más elegante, estoy seguro, pero hace el trabajo bien.

+2

Realmente apesta que esta es la única solución. La razón por la que esto ocurre es que los diseñadores de fuentes codifican intencionalmente los límites de sus letras como menos de lo que realmente son para que aniden. Esto es especialmente importante para fuentes cursivas y cursivas. Ojalá Apple no hubiera sido tan "preciso" con el cálculo del ancho de la etiqueta UIButton, o al menos nos haya permitido cambiarlo nosotros mismos. Estoy presentando un informe de error, tú también deberías. – Bek

1

Me parece que su contenido está alineado funky. Si no se puede acceder directamente al marco de la etiqueta, use [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; para tratar de solucionar el problema de alineación horizontal.

+0

En realidad se establece en el centro como es. Si lo configuro a la derecha, permanece recortado. –

9

Aunque la solución de Jeshua funciona bien, no es una solución óptima a mis ojos. Prefiero recomendar la subclase UIButton y sobrescribir su método layoutSubviews.

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

Esto es realmente fácil de hacer, solo haga una clase (subclase UIButton), copie y pegue, asigne a la clase personalizada del botón. ¡Gracias! –

+0

Esta debería ser la respuesta aceptada. Simple y elegante. –

+0

perfecto Gracias –

0

código Swift para respuesta anterior:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
} 
Cuestiones relacionadas