[objective-c] Centro Alinea el texto en el problema UITableViewCell


3 Answers

No funciona porque la textLabel es tan amplia como debe ser para cualquier texto dado. ( UITableViewCell mueve las etiquetas como mejor le parezca cuando se establece en el estilo UITableViewCellStyleSubtitle )

Puede anular las vistas de diseño para asegurarse de que las etiquetas llenen siempre el ancho completo de la celda.

- (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 misma altura / posición, ya que mientras el texto de textLabel esté vacío, textLabel se textLabel verticalmente.

Question

Soy un poco nuevo en el desarrollo de Objective-C y iPhone y me encontré con un problema al tratar de centrar el texto en una celda de tabla. He buscado en google, pero las soluciones son para un viejo error de SDK que se ha corregido y estos no funcionan para mí.

Cierto 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;
}

Lo anterior no centra el texto.

También probé el método willDisplayCell:

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

y he probado algunas de las soluciones publicadas anteriormente:

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

Ninguno de estos tiene ningún efecto en la alineación del texto. Me he quedado sin idea de que cualquier ayuda sería muy apreciada.

Saludos de antemano.




En la misma situación, creé UITableViewCell personalizado con una etiqueta personalizada:

Archivo MCCenterTextCell.h:

#import <UIKit/UIKit.h>

@interface MCCenterTextCell : UITableViewCell

@property (nonatomic, strong) UILabel *mainLabel;

@end

Archivo MCCenterTextCell.m:

 #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



Usa este código:

cell.textLabel.textAlignment = NSTextAlignmentCenter;

El código anterior funcionará. No utilice UITextAlignmentCenter, está en desuso.




En caso de que desee alinear el texto a la derecha, he tenido éxito en adaptar la solución que se describe here .

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



Related