2009-08-20 18 views
7

Tengo un número de filas que estoy insertando en una tabla usando -insertRowsAtIndexPaths: withRowAnimation, y me gustaría que las filas se sangraran desde la izquierda para distinguirlas del resto de las celdas. La propiedad indentationLevel de UITableViewCell parece que es exactamente lo que necesito, pero parece que no hace nada. Aquí está el código que estoy usando para establecer el nivel de sangría (sintaxis con punto no hace una diferencia):indentationLevel propiedad no parece hacer nada?

[cell setIndentationWidth:10]; 
[cell setIndentationLevel:1]; 

Es indentationLevel lo que quiero, o debería estar buscando en otros lugares?

Respuesta

0

Todo lo que he leído sugiere que así es como se supone que debes hacerlo. Asegúrese de no crear una nueva celda con el mismo puntero más adelante en el código (después de establecer la sangría, pero antes de que se dibuje). ¿Has intentado configurar la sangría a algo más grande que sería más notable en la pantalla (por ejemplo, 100px en lugar de 10)?

+0

Cuando dices puntero, no te refieres al identificador, ¿o sí? Mis celdas son todos objetos de la misma clase, así que me imagino que todos serían punteros para el mismo objeto. Mi identificador de celda, sin embargo, se basa en el indexPath completo y, por lo tanto, es único para cada celda. Sin embargo, todavía no hay alegría por la sangría. – JoBu1324

+0

He confirmado que el ancho y el nivel de sangría se establecen en la celda antes de que la celda se devuelva al sistema operativo para su visualización. ¿Qué podría estar yendo mal? – JoBu1324

1

Es posible que esté superando su implementación en sus celdas. en

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     if (cell == nil) 
     { 
      cell = (UITableViewCell*)[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellType01"] autorelease]; 
      [cell setIndentationLevel:indexPath.row]; 
      [cell setIndentationWidth:10]; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 
      // Tag the view 
      [[[cell subviews] objectAtIndex:0] setTag:111]; 
      UILabel* labelView = [[UILabel alloc] initWithFrame: CGRectMake(cell.indentationLevel*cell.indentationWidth, 0, 300, 20)]; 
     } 
    } 
14

indentationLevel y indentationWidth afectan el posicionamiento de los elementos estándar textLabel, detailTextLabel, y IMAGEVIEW. No afectan el origen del marco de contentView.

Si no está utilizando TextLabel, etc. (tal vez porque se dirige a iPhone OS 2), necesita manejar la sangría manualmente, como muestra la respuesta anterior.

1

Me encontré con un problema similar con mi aplicación. Tenía un UITableView que NO estaba usando celdas personalizadas. Estaba usando un UITableViewCell con un estilo básico. En mi - (UITableViewCell *)tableView: cellForRowAtIndexPath: método de delegado, configuré indentationWidth y indentationLevel de la celda. No hicieron nada. Incluso intenté modificar el método de delegado - (NSInteger)tableView: indentationLevelForRowAtIndexPath:. Nada.

Lo que finalmente funcionó fue ir al guión gráfico y modificar los atributos de la celda de vista de tabla. Una vez que establecí el ancho de sangría allí, comencé a obtener una sangría adecuada. La propiedad indentationLevel comenzó a funcionar. Incluso el - (NSInteger)tableView: indentationLevelForRowAtIndexPath: fue útil.

Básicamente, parece que la propiedad indentationWidth se ignora a favor del "Ancho de sangrado" en el guión gráfico.

Esto fue con Xcode 5.0.2 iOS dirigidos 7.

3

Esto parece ser un fallo en iOS 7 si no está utilizando células personalizados.

Establecer indentationLevel o indentationWidth dentro de tableView:cellForRowAtIndexPath: no tiene ningún efecto en el diseño de la celda cuando es hora de mostrarla.

Por ejemplo, considere el siguiente código:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    BOOL isIndented = indexPath.row % 2; 

    cell.textLabel.text = isIndented ? @"Indented" : @"Not indented"; 
    cell.indentationLevel = isIndented; 
} 

no tengo la reputación suficiente para publicar capturas de pantalla, pero el resultado es diferente entre iOS 6 y iOS 7. Esto es usando Xcode 5 y el iOS 7 SDK.

+0

¿Puede proporcionar alguna solución o solución? –

+2

La solución consiste en utilizar una celda personalizada, incluso si va a emular un estilo de celda predeterminado. Simplemente cree una nueva subclase de UITableViewCell y, dependiendo de si está utilizando Storyboards o archivos Nib, configure un prototipo de celda o registre un archivo Nib respectivamente para que lo use su subclase de celda. – Skyboat

0

Sé que esta pregunta es de 4 años de edad, pero si usted es ya utilizando una subclase personalizada de UITableViewCell, y que ya va a añadir sus puntos de vista como subvistas de contentView asegurarse de que no está anulando en layoutSubviews tu celular. Si es así, deberá ajustar los límites/el centro o el marco del contentView manualmente, en layoutSubviews.

Cuestiones relacionadas