5

Tengo una UINavigationBar con un UIBarButtonItem personalizado (que utiliza un UIButton como su vista personalizada). El problema es: el área activa del botón personalizado es demasiado grande, si toco al menos 40 píxeles fuera del botón, aún se registra como un toque en el botón. Esto resulta en golpecitos accidentales. ¿Cómo puedo reducir el área activa de estos botones?área activa más pequeña para UIBarButtonItem personalizado

+3

Solo mencionar esto (realmente debería ser obvio a partir de la pregunta, pero aparentemente no lo es): no se trata de reducir el tamaño del botón. Se trata de reducir el área que responde a los toques del botón. Por lo general, esa área es igual al tamaño del botón, a excepción de los elementos del botón de barra donde el área activa es algo más grande que la barra misma para que sea más fácil de tocar. – mrueg

Respuesta

0

Creo que no ha cambiado el tamaño del botón personalizado ... Intente hacer esto ... En el constructor Interfaz, seleccione el botón que desea reducir el área activa y luego presione "Comando + 3" o "herramientas -> Tamaño inspector" en que reducen y valores 'W' 'H' ... esto hará que el botón personalizado más pequeño y por lo que el área activa también consigue reducir ...

~ Raviraja

0

¿Está agregando el botón a través de Interface Builder o lo está haciendo mediante programación? De cualquier manera, se puede utilizar esta línea de código para establecer los límites de la imagen:

yourButton.bounds = CGRectMake(0, 0, yourImage.size.width, yourImage.size.height); 

Si quieres un ejemplo completo, aquí hay uno que utilicé en una de mis aplicaciones:

UIImage *image = [UIImage imageNamed:@"audio-off.png"]; 
    UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    myMuteButton.bounds = CGRectMake(0, 0, image.size.width, image.size.height);  
    [myMuteButton setImage:image forState:UIControlStateNormal]; 
    [myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];  
    UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton]; 
    navBar.leftBarButtonItem = myMuteBarButtonItem; 
    [myMuteBarButtonItem release]; 
6

I notó esta rareza también. Descubrí que al usar un contenedor, UIView corrige esto. Por ejemplo:

UIButton *menuButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
[menuButton addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside]; 
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal]; 
UIView *menuButtonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
[menuButtonContainer addSubview:menuButton]; 
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonContainer]; 
Cuestiones relacionadas