2011-11-29 9 views
6

Estoy creando un botón programáticamente para una aplicación de iPad. cuando veo el botón, parece que hay una cosa de tipo sombra debajo de él. ¿Qué es y cómo puedo deshacerme de eso?Hay una sombra en mi botón

shadow button

Este es el código que lo crea:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
myButton.titleLabel.font = [UIFont fontWithName:@"Trebuchet MS" size:12]; 
[myButton setTitle:@"test" forState:UIControlStateNormal]; 
myButton.frame = CGRectMake(0, 0, self.leftScrollView.frame.size.width, 50); 

UIImageView *myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"gear12.png"]]; 

[myButton addSubview:myImageView]; 
[self.leftScrollView addSubview:myButton]; 

ACTUALIZACIÓN:

bien, noto que solamente conseguir ese efecto cuando su en mi ScrollView. si lo agrego a la vista, no hay efecto de sombra.

botón de prueba superior, el botón es una subvista de la vista. el botón inferior es una subvista de la vista de desplazamiento que es una subvista de la vista (botón/vista vs botón/vista de desplazamiento/vista).

sección blanca es la vista, gris es la vista/desplazamiento de desplazamiento.

shadow effect 2

ACTUALIZACIÓN 2:

como ha señalado robmayor, UIButtons siempre tienen ese efecto doble línea, simplemente no noticeble cuando el color de fondo es blanco. el azul es una vista y el gris es la subvista vista de desplazamiento.

enter image description here

+0

esto podría ser útil: http://stackoverflow.com/questions/18341319/how-to-get-rid-of-gap-around-round-rect-button –

Respuesta

5

En iPads, un UIButton redondeado siempre dibuja una línea blanca a lo largo de su borde inferior. No puede ver esa línea blanca si la supervista del botón es blanca, pero aún está allí.

Usted tiene algunas opciones:

  • hacer que el blanco supervista. Este es el más fácil, pero puede que no te guste la forma en que se ve.

  • Realice algunas imágenes redondas en su editor de imágenes favorito. Establezca el tipo de botón en personalizado y establezca sus imágenes redondas redondeadas como imágenes del botón.

  • Crea una subclase de UIButton e invalida su método drawRect:.

  • Set el tipo de botón con la costumbre y el uso de propiedades de la capa del botón (button.layer.backgroundColor, button.layer.borderColor, button.layer.borderWidth, button.layer.cornerRadius) para dar el botón una apariencia rect redondeado. Tendrá que actualizar button.layer.backgroundColor cuando se toca el botón si quiere que se ponga azul como lo hace uno normal. (En realidad, uno normal usa un degradado azul.)

+0

esto es bastante tonto de manzana. hace que agregar un botón simple sea más complejo de lo necesario. Gracias. – Padin215

+0

Parece que un botón rect redondeado se dibuja realmente como una única UITableViewCell de estilo agrupado y, por lo tanto, hereda el borde blanco en la parte inferior. Este borde blanco se ve muy bien para la celda inferior en un fondo de tabla de estilo agrupado estándar. Pero hacer del botón el mismo código de dibujo fue una mala elección por parte de Apple. – matt

-1

Reemplazar con [UIButton buttonWithType:UIButtonTypeRoundedRect]:

UIButton *myButton = [UIButton new]; 

o:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

usted quiere tener su botón personalizado. Todavía puede hacerlo con esquinas redondeadas si es necesario.

+1

Por qué eso haría la diferencia? Los botones rectángulos redondeados normalmente no se dibujan dos veces así. Es más probable que el OP dibuje accidentalmente dos botones en aproximadamente el mismo lugar. – matt

+0

solo estoy agregando el único botón en mi código en este momento. Actualicé mi pregunta con información agregada. la segunda imagen, acabo de arrastrar botones en el IB. – Padin215

+0

@matt, los botones rect redondos se dibujan absolutamente así. Es trivial comprobarlo usted mismo en IB. –

9

Esta pregunta es antigua (6 meses) pero he encontrado una solución para eliminar/enmascarar este efecto negativo de las líneas dobles.

[yourButton.layer setBackgroundColor: [[UIColor blackColor]CGColor]]; 
[yourButton.layer setBorderWidth:1.0f]; 
[yourButton.layer setBorderColor:[[UIColor blackColor]CGColor]]; 
[yourButton.layer setShadowOpacity:0.1f]; 
[yourButton.layer setCornerRadius:10]; 

UIColor seleccionado depende del fondo actual de su vista.

Resultado: enter image description here

+0

Esto crea un borde negro en el botón. Trabaja mejor, pero no quites la línea. – Rodrigo

+0

¡Esto es perfecto! (Aunque no estoy seguro de que sea necesario establecer el color de fondo o la opacidad de la sombra). – fumoboy007

Cuestiones relacionadas