Yo soy un poco nuevo en Objective-C y de desarrollo de iPhone y me he encontrado con un problema al intentar centrar el texto en una celda de la tabla. He buscado en google, pero las soluciones son para un viejo SDK bug que ya ha sido arreglado y estos no funcionan para mí.

Código:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = @"Please center me";
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    return cell;
}

El de arriba no centrar el texto.

También he probado el willDisplayCell método:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.textAlignment = UITextAlignmentCenter;
}

y he probado algunas de las antiguas publicado soluciones:

UILabel* label = [[[cell contentView] subviews] objectAtIndex:0];
label.textAlignment = UITextAlignmentCenter;
return cell;

Ninguno de estos tiene ningún efecto sobre la alineación del texto. He de ejecutar fuera de la idea de que cualquier ayuda sería muy apreciada.

Saludos de antemano.

  • UITextAlignment está en desuso en iOS 6.0, ahora NSTextAlignment
  • cell.textLabel?.textAlignment = .center
InformationsquelleAutor Magpie | 2010-08-12

9 Comentarios

  1. 125

    No sé si ayuda a su problema específico, sin embargo UITextAlignmentCenter funciona si uso initWithStyle:UITableViewCellStyleDefault

    • Esto ayudó, ya que no estaba usando el sutil para las células quería centro. Gracias. Supongo que UITextAlignmentCenter no funciona para UITableViewCellStyleSubtitle células.
    • UITextAlignmentCenter está ahora en desuso. Consulte este post para una buena alternativa.
    • PERFECTO. Alguien en Apple debería ser despedido por el suministro de nosotros con mensajes de error que no se explica cómo resolver problemas. Si no fue stackoverflow y a personas como usted, nos dará todos los jodidos.
    • No la respuesta correcta. UITextAlignmentCenter está en desuso. Utilizar en su lugar: la célula.textLabel.textAlignment = NSTextAlignmentCenter;
  2. 15

    No funciona porque el textLabel es tan amplia como tiene que ser para cualquier texto dado. (UITableViewCell mueve las etiquetas de todo como lo estime conveniente, cuando se establece en el UITableViewCellStyleSubtitle estilo)

    Puede reemplazar layoutSubviews para asegurarse de que las etiquetas siempre llene la celda todo el ancho.

    - (void) layoutSubviews
    {
        [super layoutSubviews];
        self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.frame.size.width, self.textLabel.frame.size.height);
        self.detailTextLabel.frame = CGRectMake(0, self.detailTextLabel.frame.origin.y, self.frame.size.width, self.detailTextLabel.frame.size.height);
    }

    Asegúrese de mantener la altura, la posición y el mismo, porque mientras el detailTextLabel‘s de texto está vacío textLabel estará centrada verticalmente.

    • Estas líneas combinado con: self.detailTextLabel.textAlignment = UITextAlignmentRight; y self.textLabel.textAlignment = UITextAlignmentRight; Hizo exactamente lo que yo estaba buscando y me permitió seguir utilizando el UITableViewCellStyleSubtitle.
  3. 5

    Utilizar este código:

    cell.textLabel.textAlignment = NSTextAlignmentCenter;

    Código anterior trabajo.
    No uso UITextAlignmentCenter, es obsoleto.

    • De hecho, este no funciona, gracias!
  4. 4

    Este hack se centre el texto cuando se utiliza UITableViewCellStyleSubtitle.
    Cargar las etiquetas de texto con sus cadenas, a continuación, hacer esto antes de volver a la celda. Podría ser más sencillo sólo tiene que añadir su propio UILabels a cada celda, pero yo estaba decidido a encontrar otra manera…

    //UITableViewCellStyleSubtitle measured font sizes: 18 bold, 14 normal
    UIFont *font = [UIFont boldSystemFontOfSize:18]; //measured after the cell is rendered
    CGSize size = [cell.textLabel.text sizeWithFont:font];
    CGSize spaceSize = [@" " sizeWithFont:font];
    float excess_width = ( cell.frame.size.width - 16 ) - size.width;
    if ( cell.textLabel.text  &&  spaceSize.width > 0  &&  excess_width > 0 ) { //sanity
    int spaces_needed = (excess_width/2.0)/spaceSize.width;
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0];
    cell.textLabel.text = [pad stringByAppendingString:cell.textLabel.text]; //center the text
    }
    font = [UIFont systemFontOfSize:14]; //detail, measured
    size = [cell.detailTextLabel.text sizeWithFont:font];
    spaceSize = [@" " sizeWithFont:font];
    excess_width = ( cell.frame.size.width - 16 ) - size.width;
    if ( cell.detailTextLabel.text  &&  spaceSize.width > 0  &&  excess_width > 0 ) { //sanity
    int spaces_needed = (excess_width/2.0)/spaceSize.width;
    NSString *pad = [@"" stringByPaddingToLength:spaces_needed withString:@" " startingAtIndex:0];
    cell.detailTextLabel.text = [pad stringByAppendingString:cell.detailTextLabel.text]; //center the text
    }
    • no funciona para mí
  5. 0

    En CustomTableViewCell.m:

    - (void)layoutSubviews {
    [super layoutSubviews];
    self.textLabel.frame = CGRectMake(0, self.textLabel.frame.origin.y, self.contentView.frame.size.width, self.textLabel.frame.size.height);
    }

    En el método de la tabla:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell";
    CustomTableViewCell *cell = (CustomTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.textLabel.text = @"Title";
    cell.textLabel.textAlignment = UITextAlignmentCenter;
    return cell;
    }

    Si es necesario, la misma cosa puede ser repetido para self.detailTextLabel

  6. 0

    En la misma situación que me personalizado creado UITableViewCell con una etiqueta personalizada:

    MCCenterTextCell.h archivo:

    #import <UIKit/UIKit.h>
    @interface MCCenterTextCell : UITableViewCell
    @property (nonatomic, strong) UILabel *mainLabel;
    @end

    MCCenterTextCell.m de archivo:

     #import "MCCenterTextCell.h"
    @interface MCCenterTextCell()
    @end
    @implementation MCCenterTextCell
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    self.accessoryType = UITableViewCellAccessoryNone;
    self.selectionStyle = UITableViewCellSelectionStyleGray;
    _mainLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, 320, 30)];
    _mainLabel.font = BOLD_FONT(13);
    _mainLabel.textAlignment = NSTextAlignmentCenter;
    [self.contentView addSubview:_mainLabel];
    }
    return self;
    }
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated
    {
    [super setSelected:selected animated:animated];
    //Configure the view for the selected state
    }
    @end
  7. 0

    Podría utilizar código para centrar el texto

    de la célula.indentationLevel = 1;

    de la célula.indentationWidth = [UIScreen pantalla principal].límites.tamaño.ancho/2-10;

  8. 0

    En caso de que uno desea alinear el texto a la derecha, he tenido éxito en la adaptación de la solución descrita aquí.

    cell.transform = CGAffineTransformMakeScale(-1.0, 1.0);
    cell.textLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);
    cell.detailTextLabel.transform = CGAffineTransformMakeScale(-1.0, 1.0);
  9. 0

    Aquí es lo que funciona para mí…

    NSString *text = @"some text";
    CGSize size = [text sizeWithAttributes:@{NSFontAttributeName:SOME_UIFONT}];
    [cell setIndentationLevel:1];
    [cell setIndentationWidth:(tableView.frame.size.width - size.width)/2.0f];
    cell.textLabel.font = SOME_UIFONT;
    [cell.textLabel setText:text];

Dejar respuesta

Please enter your comment!
Please enter your name here