Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - UITableViewCell text alignment

I've added a tableView and dragged a table view cell into it. in the utilities panel, I changed the style to subtitle. I've also tried changing it in code:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

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

    cell.textLabel.textAlignment = UITextAlignmentCenter;
    cell.detailTextLabel.textAlignment = UITextAlignmentCenter;

    cell.textLabel.text = [myArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [myArray2 objectAtIndex:indexPath.row];

    return cell;

The center alignment doesn't work!

I've tried adding a label object to the cell to have a workaround. But I don't know how to access it. even though I assigned an outlet to it, this wouldn't work:

cell.labelForCell....

What should I do? any suggestions on how I make it work the usual way, without adding a label to the cell or something?

like image 824
Milad Avatar asked Jun 16 '12 10:06

Milad


2 Answers

For the UITableViewCellStyleSubtitle text alignment cannot be changed You will have to put a label and add your alignment to it, To do that you could use this code

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel *myLabel;
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        myLabel = [[UILabel alloc] initWithFrame:Your_Frame];
        //Add a tag to it in order to find it later
        myLabel.tag = 111;
        //Align it
        myLabel.textAlignment= UITextAlignmentCenter;

        [cell.contentView addSubview:myLabel];
    }

    myLabel = (UILabel*)[cell.contentView viewWithTag:111];
    //Add text to it
    myLabel.text = [myArray objectAtIndex:indexPath.row];

    return cell;
}
like image 166
Omar Abdelhafith Avatar answered Nov 17 '22 16:11

Omar Abdelhafith


The problem with the subtitle style is that it does a [self.textLabel sizeToFit] when it lays out. When you center in a container that is the perfect size of the contents, nothing changes.

Try this. In a subclass of UITableViewCell, set your textAlignment, and use this as your layoutSubviews code:

- (void)layoutSubviews
{
    [super layoutSubviews];

    {
        CGRect frame = self.textLabel.frame;
        frame.size.width = CGRectGetWidth(self.frame);
        frame.origin.x = 0.0;
        self.textLabel.frame = frame;
    }

    {
        CGRect frame = self.detailTextLabel.frame;
        frame.size.width = CGRectGetWidth(self.frame);
        frame.origin.x = 0.0;
        self.detailTextLabel.frame = frame;
    }
}

This makes the textLabel's frame full width, and thus allows the centering effect to be noticeable.

Note: since this overrides layoutSubviews, there is a performance cost as it will be called often.

like image 2
Ian Hoar Avatar answered Nov 17 '22 16:11

Ian Hoar