2011-12-21 15 views
6

Estoy trabajando en una aplicación que tiene muchas UITableViews y estoy tratando de darles un color de fondo con textura. Necesito usar el estilo Agrupado porque no quiero que los encabezados de las secciones floten sobre los campos de texto cuando el usuario se desplaza.Textura de fondo de un UITableView agrupado no se desplazará con la tabla

El problema que tengo es que cuando uso el estilo Agrupado, la textura de fondo no se desplaza con la tabla; permanece en su lugar mientras la tabla se desplaza hacia arriba. Siento que esto es un poco raro y preferiría tener el pergamino de fondo con la mesa, como lo hace en el estilo simple. Desafortunadamente, debido a que no puedo tener las vistas de encabezado flotando encima de todo, eso no parece ser una opción.

¿Alguien ha sido capaz de lograr esto?

Aquí hay un código relevante:

- (void)loadView { 
    [super loadView]; 
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"texturedPattern.png"]]; 
    // this prevents the cells from replicating the background texture 
    self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    // disable the default grouped border since we're doing it manually with the textField 
    cell.backgroundView = nil; 
    cell.backgroundColor = [UIColor clearColor]; 
} 

Y mi vista de la tabla actualmente se ve así: Just to give you an idea...

ACTUALIZACIÓN

Como sugirió Amit Vyawahare, he intentado aplicar la textura de fondo de el fondo de los encabezados y cada celda. Hay dos problemas que son mucho más obvios cuando lo ves en movimiento, pero haré mi mejor esfuerzo.

  • En primer lugar, el fondo está siempre visible. He quitado el color de fondo de la mesa para que sea más evidente:

Scrolling areas vs. non-scrolling areas

todas partes se ve negro, la textura de fondo de la tableView sería visible y no se desplazará con el tableView. El estilo TableView agrupado inserta el borde de 5 píxeles en cada lado de cada celda y no se puede cambiar. Además, no hay un pie de página debajo de la sección de identificación del personal, e incluso he implementado -tableView:heightForFooterInSection: para devolver 0.0, pero todavía hay un espacio allí.

  • segundo lugar, incluso si fuera capaz de deshacerse de estas lagunas, las texturas no se alinean todos modos. Una vez más, esto es difícil de ver, por lo que he subido una captura de pantalla retina para que sea un poco más fácil:

if you squint, you'll see a totally rad 3d image!

Esto es más evidente por encima de la sección de contraseña, se puede ver las texturas don No se alinea correctamente y se ve como un "pliegue" en el papel. Lo cual sería genial, supongo, si eso es lo que el cliente quería. Es visible, pero menos obvio en casi todos los bordes de la segunda captura de pantalla. Esto se debe a que la textura es realmente bastante grande: 200x200 (400x400 @ 2x), y hay pequeñas variaciones en el color que no se notan a menos que suceda este tipo de desalineación.

+0

¿Por qué no puedes crear una celda de vestuario con el fondo de textura? – AAV

+0

El fondo con textura es bastante grande, 200x200. Incluso si pudiera aplicarlo en el fondo de cada celda y cada encabezado y pie de página en toda la aplicación, que estoy seguro sería una TONELADA de trabajo, podría decir dónde comenzó cada celda porque la repetición las texturas no se alinearían correctamente. –

+0

200x200 no es grande. Estoy haciendo algo similar es mi proyecto. Cree una celda de vestuario y vacíe toda la información que desee y use esa celda en TableVIew. Si todavía no puede hacerlo, descargue su código y déjeme ver qué tan difícil es hacer mi solución. – AAV

Respuesta

0

Primero reemplace su UITableViewController por un UIViewController y añádale un UITableView. Establezca el autoresizingMask en ancho/alto flexible. Ahora tiene algo equivalente a UITableViewController, pero con más control sobre la jerarquía de vistas.

A continuación, agregue una vista debajo de la tabla (en realidad: agregue esa primero) que contiene el fondo.

Finalmente, establezca el delegado de la vista de desplazamiento en su clase y responda a los eventos de desplazamiento actualizando su vista de fondo en consecuencia.

+0

Tomé su idea y corrí con ella. –

+0

1. Convierta la vista de una subclase de UITableViewController en una subclase de UIViewController. 2. Agregue un UIScrollView con la textura detrás de la tabla vista. 3. Observe y sincronice los cambios en 'contentSize' y' contentOffset' de tableView con scrollView. 4. Observe la apariencia del teclado y modifique el marco de tableView. Ahora, voy a consolidar ese código en una clase para que no tenga que repetirlo en cada vista de la aplicación. –

Cuestiones relacionadas