AVISO: Cualquier pregunta que no cumpla ninguno de estos criterios podrá ser borrada sin previo aviso.

Hola,

Estoy haciendo un Custom UIButton y quiero poner la imagen centrada y el texto debajo de esta.

He estado mirando por internet y he visto que puedo moverlos con las propiedades del UIButton:

  • titleEdgeInsets
  • imageEdgeInsets

Entonces me he puesto a generar los UIEdgeInsets con UIEdgeInsetsMake pero no entiendo ciertas cosas.

Al centrar la imagen calculo donde empezaría relativamente al borde izquierdo del botón:

tamaño del botón/2 - tamaño de la imagen/2

Entonces miro la posición actual de la imagen y a lo que he calculado le resto la distancia del borde izquierdo del botón a la posición por defecto de la imagen. Entonces ya se cuanto tengo que desplazarla para que se coloque en el centro.

El problema esta en que no se porque no obtengo el resultado que deseo y para que se centre bien tengo que multiplicar por dos lo calculado.

float insetx = [button frame].size.width/2 - [[button currentImage] size].width/2 - [[button imageView] frame].origin.x;
[button setImageEdgeInsets:UIEdgeInsetsMake(, 0, 0, - insetx*2)];

¿Alguien me podría explicar que hago mal?

preguntado 10 Feb '12, 15:06

intropedro's gravatar image

intropedro
11113


Te explico mi estrategia.

  1. Crea tu botón de tipo Custom.
  2. Añadele el title que necesites (poniendo el tipo de letra, color, tamaño…)
  3. No le añadas ninguna imagen de fondo, eso lo haremos mediante código:

    // Configura boton indicado con IBOutlet
    UIImage *imageNormalDone = [UIImage imageNamed:@"PrefButtonDoneNormal.png"];
    UIImage *imagePressedDone = [UIImage imageNamed:@"PrefButtonDoneSelect.png"];
    [doneButton setBackgroundImage:[imageNormalDone stretchableImageWithLeftCapWidth:9 topCapHeight:0]
                           forState:UIControlStateNormal];
    [doneButton setBackgroundImage:[imagePressedDone stretchableImageWithLeftCapWidth:9 topCapHeight:0]
                           forState:UIControlStateHighlighted];
    

El valor del stretchableImageWithLeftCapWidth dependerá de la redondez que tenga tu botón. Recuerda la mejor forma de hacer los PNG para tus botones (botones optimizados). Pero verás el título en el medio. Si quieres mover 1px a la izquierda y 4 hacia arriba siempre puedes usar al final del todo:

    imageNormalDone.contentEdgeInsets = UIEdgeInsetsMake(-1.0, 4.0, .0, .0);

Espero haberte ayudado. Suerte.

enlace permanente

respondido 14 Feb '12, 15:35

Soulless's gravatar image

Soulless
59161421

Tu respuesta:
Activar/desactivar vista previa