2011-06-09 16 views
6

En uno de mi vista estoy usando un UIWebView y me gustan los efectos de sombra predeterminados en la parte superior e inferior de la vista de fondo, y también arriba y abajo del área de desplazamiento.UITableView Shadows arriba y abajo

No es lo mismo en la aplicación Reloj, con un fondo personalizado (línea azul con mapa del mundo) por lo que es posible usando un UITableView también supongo ...

Aquí es lo que tengo con mi vista web y que me gustaría agregar a una vista de tabla. Mi vista web:

enter image description here

por lo que añade un fondo personalizado aquí (la textura de color gris claro). Aquí está debajo de la otra vista donde agregué el mismo fondo, pero como pueden ver no hay sombra ... No es un efecto incorporado como un UIScrollView, supongo. ¿Hay alguna manera de hacer lo mismo con una vista de tabla?

Mi vista de tabla:

enter image description here

ACTUALIZACIÓN 1:

me encontré con este gran artículo UITableView Shadows pero no hay sombra de la parte inferior de la vista.

Respuesta

2

Esto funciona tanto para UITableViewController como para UIViewController. En mi viewDidLoad: Puedo usar el siguiente código:

[self.view addSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"shadow.png"]]]; 

Esto añadirá la sombra justo debajo de la barra de navegación.

Y esta es mi sombra me tiró juntos en Photoshop:

enter image description here

+0

llegué éste, sólo necesito una sombra en la parte inferior de mi vista. Y esta vista es un controlador de navegación, pero a veces se carga en mi vista principal con mi barra de pestañas, y también como una vista modal sin barra de pestañas ... – Dachmt

3

Una pieza fundamental de un punto de vista es que es una capa que es CALayer. Puede acceder a ella a través de la propiedad de capa de vistas:

myView.layer 

En los CALayers documentación tienen varias propiedades que controlan la sombra. Debería poder decirle a la capa de la barra de navegación que proyecte una sombra. Junto con las capas de cualquier otro contenido que quiera proyectar una sombra.

myView.layer.shadowOffset 
myView.layer.shadowRadius 

Deberá asegurarse de agregar el marco QuartzCore a su proyecto para acceder a esta propiedad.

0

Mi código. P.ej. de sombra en el pie de página:

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
{ 
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,tableView.bounds.size.width, 11)]; 

    UIImageView *shadow = [[UIImageView alloc] initWithImage:[UIImage 
                imageNamed:@"tableHeaderBottom"]]; 
    [shadow sizeToFit]; 
    [footerView addSubview:shadow]; 

    return footerView; 
} 

- (void)viewDidLoad 
{ 
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, -11, 0)]; 
    [super viewDidLoad]; 
} 

Las imágenes:
Normal image Retina image

Para el encabezado: Utilice el mismo código pero sólo voltear la imagen verticalmente y utilizar viewForHeaderInSection en la primera sección (0).

8

Aquí está mi código en Swift creo que funciona bien:

func shadowView (view : UIView , r : CGFloat, gr : CGFloat , b : CGFloat , header : Bool) 
    { 
     let bottomColor = UIColor (red: r/255 , green: gr/255 , blue: b/255 , alpha: 0) 

     //var bottomColor = UIColor (red: (r/255), green : (g/255), blue : (b/255), alpha : 0) 
     //var topColor = UIColor (red: (r/255), green : (g/255), blue : (b/255), alpha : 1) 
     let topColor = UIColor (red: r/255, green: gr/255, blue: b/255, alpha: 1) 
     var arrayColors: [CGColor] = [ 
      topColor.CGColor, 
      bottomColor.CGColor 
     ] 

     if header 
     { 
      let headerShadow: CAGradientLayer = CAGradientLayer() 

      headerShadow.frame = CGRect(x: 0, y: 0, width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height) 
      headerShadow.colors = arrayColors 
      view.layer.insertSublayer(headerShadow, atIndex: 1) 
     } else 
     { 
      let footerShadow: CAGradientLayer = CAGradientLayer() 

      arrayColors = [ 
       bottomColor.CGColor, 
       topColor.CGColor 
      ] 
      footerShadow.frame = CGRect(x: 0, y: 0 , width: UIScreen.mainScreen().bounds.width, height: view.frame.size.height) 
      footerShadow.colors = arrayColors 
      view.layer.insertSublayer(footerShadow, atIndex: 1) 
     } 
    } 
Cuestiones relacionadas