2012-06-27 15 views
5

Quiero que mi texto se alinee correctamente.alineación de texto de UILabel derecha

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
cell=[[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"] autorelease]; 
CGSize textSize = { 210.0, 10000.0 }; 
CGSize size = [[gMessageArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:textSize lineBreakMode:UILineBreakModeWordWrap]; 

UILabel *lisnerMessage=[[[UILabel alloc] init] autorelease]; 
lisnerMessage.backgroundColor = [UIColor clearColor]; 
[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 
lisnerMessage.numberOfLines=0; 
lisnerMessage.textAlignment=UITextAlignmentRight; 
lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; 
[cell.contentView addSubview:lisnerMessage]; 
return cell 
} 

pero mi texto no es alinear a la derecha por favor ayuda

+0

Esto no es una respuesta a su pregunta, pero un comentario en la lógica. ¿Seguro que quieres agregar una etiqueta adicional a tu celda cada vez que la tabla se actualiza? –

+0

@PhillipMills: para cada celda tengo texto diferente, no texto adicional en esa celda –

+0

A menos que haya un código en alguna parte que elimine etiquetas antiguas de las celdas, lo que publique siempre agregará una etiqueta más cada vez que se solicite una ruta de índice específica . –

Respuesta

9

Puesto que está utilizando sizeWithFont, y luego poner su marco a ese tamaño, el texto está alineado a la derecha. Prueba agregar un color de fondo de gris claro a tu etiqueta para ver de lo que estoy hablando. Su etiqueta debe establecerse en el mismo tamaño que su celda de tabla y permitir que el texto fluya dentro de ella. Luego se alineará a la derecha.

actualización con la muestra

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"lisn"]; 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"lisn"]; 

    UILabel *lisnerMessage = [[UILabel alloc] init]; 
    lisnerMessage.backgroundColor = [UIColor clearColor]; 
    [lisnerMessage setFrame:cell.frame]; 
    lisnerMessage.numberOfLines = 0; 
    lisnerMessage.textAlignment = NSTextAlignmentRight; 
    lisnerMessage.text = [gMessageArray objectAtIndex:indexPath.row]; 
    [cell.contentView addSubview:lisnerMessage]; 

    return cell 
} 
+0

: ¿puede por favor elaborar o poner algún código con respecto a su respuesta? Sería muy útil para mí –

+1

Sí, el truco con el color de fondo diferente es bueno. Ayudará a Alok a entender lo que sucede. Usar sizeWithFont está bien en principio, pero no utilizaría size.with para el fotograma. Utilice [lisnerMessage setFrame: CGRectMake (75, 20, textSize.width + 5, size.height + 2)]; en lugar. –

+0

He editado su código con un ejemplo crudo de los cambios necesarios. No lo probé en Xcode, pero esa es la idea. solo reconstruye tu lógica en consecuencia. –

0

¿Por qué no acaba de hacer la etiqueta en constructor de interfaces/guión gráfico y seleccione la opción "Alinear a la derecha"? Luego, conéctelo como una propiedad llamada lisnerMessage y lisnerMessage.text=[gMessageArray objectAtIndex:indexPath.row]; Eso reduciría significativamente la cantidad de código que está escribiendo y definitivamente funcionará.

1

Finalmente he solucionado mi problema. Estaba haciendo pequeño error

[lisnerMessage setFrame:CGRectMake(75 ,20,size.width + 5,size.height+2)]; 

me acaba de quitar size.width y doy mi coordenada específica de 200 después de que el texto es alinear a la derecha.

[lisnerMessage setFrame:CGRectMake(75 ,20,200,size.height+2)]; 

Gracias a todos por su respuesta

5

alineación a la derecha de la etiqueta

yourLabel.textAlignment = NSTextAlignmentRight;