2009-08-20 18 views
20

Estoy usando una UITableViewCell con UITableViewCellStyleSubtitle. Sin embargo, debido a la imagen de fondo que estoy usando para la celda, no me gusta hacia dónde se dirige detailTextLabel. Quiero moverlo y cambiar su tamaño dentro de la celda, pero nada de lo que intento parece funcionar.Ajuste de las posiciones de las etiquetas en una UITableViewCell

CGRect currRect = cell.detailTextLabel.frame; 
cell.detailTextLabel.frame = CGRectMake(currRect.origin.x + 20, currRect.origin.y, currRect.size.width - 40, currRect.size.height); 

He intentado poner este código en tanto tableView: cellForRowAtIndexPath y tableView: métodos forRowAtIndexPath, pero ni las obras: willDisplayCell. La etiqueta simplemente permanece donde está y tiene el mismo tamaño.

El ajuste de otras propiedades de la etiqueta (textAlignment, backgroundColor y, por supuesto, el texto mismo) funciona correctamente.

¿Cómo obtengo el detalleTextLabel para moverme donde necesito?

En caso de que esto importe (aunque no veo por qué debería), esta celda en particular también tiene propiedades imageView.image y backgroundImage establecidas. Ambas imágenes se muestran correctamente.

Respuesta

34

Querrá una subclase personalizada UITableViewCell que anule las vistas de layoutSubviews para hacer el trabajo sucio de diseñar las subvistas que estén allí. Llamar a súper y ajustar el detailTextLabel.frame es probablemente lo más fácil de hacer.

+0

Gracias. Sabía que ya podías hacer esto, pero no sabía que era el método layoutSubviews el que tenía que ser anulado. – executor21

+0

Este es un gran consejo. Sin embargo, todavía tengo este problema donde, aunque puedo personalizar las dimensiones de la etiqueta, por ejemplo, no puedo obtenerla y mostrar varias líneas, es decir: \t self.textLabel.numberOfLines = 2; \t self.textLabel.lineBreakMode = UILineBreakModeWordWrap; – Joey

+0

El comportamiento de la propiedad .textLabel debe ser idéntico a cualquier otro UILabel, ¿entonces quizás no le está dando suficiente espacio vertical? –

1

O bien, puede cambiar la celda de UITableViewCellStyleSubtitle, a la predeterminada y agregar sus propios objetos a cell.contentView y colocarlos donde desee. No necesariamente es necesario subclasificar UITableViewCell (por ejemplo, celda personalizada) o usar layoutSubViews. Todo se puede hacer en tableView: cellForRowAtIndexPath.

+0

Intenté esto. La etiqueta principal se mueve hacia el centro de la celda y tampoco se puede mover. Subclases parece menos problemático. – executor21

-3

Probablemente podría hacer esto con un CGAffineTransform. El (no probado) código para empujar los detailTextLabel derecha 10 píxeles se vería más o menos así:

CGAffineTransform translate = CGAffineTransformMakeTranslation(10.0, 0.0); 
[detailTextLabel setTransform:translate]; 

Mientras que usted puede hacer esto, creo que serás más feliz la creación de su propia costumbre UITableViewCell.

+0

No funcionó. Aparentemente, no puede ajustar las posiciones de las subvistas de ninguna manera sin subclasificar la celda. – executor21

44

Se podría tratar de ajustar la etiqueta con la sangría y la sangría nivel:

cell.indentationWidth = MY_DESIRED_WIDTH; 
cell.indentationLevel = 1; 

(para las células sin sangrar)

O para las células sangría Just Do:

cell.indentationLevel = cell.indentationLevel + 1; 

Ambos debería cambiar/sangrar sus etiquetas.

+1

Esto funciona muy bien ya que significa que para algunos diseños (donde tiene una imagen a la izquierda) no necesita agregar su propia etiqueta para reemplazar la existente. Gracias. –

+0

¡Respuesta de Grear, bueno saber finalmente que existe algo así! – pmk

+4

Vale la pena señalar que 'cell.indentationWidth' puede ser un número negativo, lo que significa que no necesita subclasificar la celda si solo necesita cambiar todo el contenido ViewView a la izquierda. – SaltyNuts

Cuestiones relacionadas