2011-09-01 20 views
13

Ok, no sé por qué esto no funciona, pero he conectado un tableView, con 19 elementos de texto que me gustaría establecer para cada celda.¡Mi UITableView no se desplazará hacia abajo hasta el final de los datos! ¿Por qué?

Las celdas se pueblan muy bien, pero cuando intento desplazarme, va hacia abajo y puedo ver las celdas que no están visibles en la vista inicial, se cuelga y no se desplazará hacia abajo. Simplemente retrocede. ¡MUY RARO!

¿Qué estoy haciendo mal?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
// Return the number of sections. 
return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
// Return the number of rows in the section. 
return 19; 
} 


// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Configure the cell... 
if(indexPath.row == 0){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 1){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 2){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 3){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 4){ 
    cell.indentationLevel = 2; 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 5){ 
    cell.indentationLevel = 2; 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 6){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 7){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 8){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 9){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 10){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 11){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 12){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 13){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 14){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 15){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 16){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 17){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 18){ 
    cell.textLabel.text = @""; 
} 

return cell; 
} 
+1

todas sus células son etiquetas de texto cadena vacía. ¿Estás realmente seguro de que no estás desplazándote de forma correcta y simplemente no puedes verlo porque todas las celdas se parecen? – picciano

Respuesta

38

Disminución de su tableView altura.

+7

¡Guau, eso fue embarazoso! Gracias por su ayuda –

+1

Hola, estoy teniendo el mismo problema. Intenté reducir el tamaño de mi vista de tabla, pero aún así no se desplazó hacia abajo y simplemente se desplaza hacia atrás hasta la primera celda/parte superior de la vista de tabla. –

+2

Creo que una de las siguientes cosas causa este problema. 1. La altura de la mesa se extiende más allá de la altura del dispositivo. 2. Algún otro elemento de UI se superpone al final de la tabla. 3. Se hicieron cambios a los datos de la tabla desde la última vez que se cargó. – septerr

2

El código que compartió se ve bien para mí. ¿Está presionando el controlador de vista con esta vista de tabla en la pila del controlador de navegación? He visto a gente hacer eso antes. La altura predeterminada de la celda es 44px y la altura de la barra de navegación es 44px también. Entonces, si presionas esto en la pila del controlador de navegación, desplazas la vista hacia atrás como lo has descrito. Si ese es el caso, reduzca la altura de TableView en 44 px (en el constructor Interfaz o Programar si dibujó esto programáticamente) y debería arreglarlo.

1

Debe ajustar la altura de su UITableView o puede intentar poner [tableView reloadData] dentro del método viewDidAppear (no parece funcionar si se coloca dentro de viewWillAppear o viewDidLoad).

La primera funciona para mí en la mayoría de los casos.

5

sé que es una vieja cuestión y esto es no una respuesta a su pregunta, sino una sugerencia para mejorar su código para que otros puedan beneficiarse.

Se puede escribir esto:

if (indexPath.row >= 4 && indexPath.row <= 8) { // 4 and 8 inclusive 
    cell.indentationLevel = 2; 
} 
cell.textLabel.text = @""; 


lugar de esto:

if(indexPath.row == 0){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 1){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 2){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 3){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 4){ 
    cell.indentationLevel = 2; 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 5){ 
    cell.indentationLevel = 2; 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 6){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 7){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 8){ 
    cell.indentationLevel = 2;  
    cell.textLabel.text = @""; 
}else if(indexPath.row == 9){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 10){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 11){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 12){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 13){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 14){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 15){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 16){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 17){ 
    cell.textLabel.text = @""; 
}else if(indexPath.row == 18){ 
    cell.textLabel.text = @""; 
} 


Y si le sucede que tiene un texto diferente para cada caso que podría o uso :

switch (indexPath.row) { 
    case 0: 
     cell.textLabel.text = @""; 
     break; 
     ... 
    case 18: 
     cell.textLabel.text = @""; 
    default: 
     break; 
} 

O mejor aún poner todo dentro de un NSArray (base de datos ...) y simplemente recorrerlos por el índice.

4

@EmptyStack la respuesta es correcta. Esa fue una alternativa, pero NO la Solución.

Incluso podemos lograr lo mismo en el guión gráfico.

Seleccione tableView -> desde el control del guión gráfico, haga clic en 'agregar las restricciones faltantes'. Eso agregará la restricción a tableView y View.

Eso me ayudó a resolver este problema. Un screen_shot adjunto para referencia.solution

+0

Tenga en cuenta que "Agregar restricciones faltantes" puede agregar restricciones a los márgenes, que no son compatibles con versiones anteriores a ios8. – BDR

1

Si tiene un guión gráfico o una punta, intente esto (tenga en cuenta que es posible que tenga que agregar algunas restricciones si desea admitir el paisaje).

enter image description here

6

Esto me ayudó:

[self.tableView setContentInset:UIEdgeInsetsMake(0,0,65,0)]; 
+3

¿Podría elaborar más su respuesta agregando un poco más de descripción sobre la solución que proporciona? – abarisone

+0

Después de alterar mi vista de tabla para usar una celda de encabezado de un xib, estaba obteniendo el problema de desplazamiento. Esto resolvió mi problema, pero soy escéptico de los problemas que podría causar en la secuencia. Debe haber algo más pasando ... – Jeff

Cuestiones relacionadas