NSTextAlignmentCenter不使用UITableViewCellStyleSubtitle

时间:2014-02-06 21:30:19

标签: ios uitableview

当单元格样式为默认值时,NSTextAlignment有效,但当我将其更改为副标题时,它不起作用。

cell.textLabel.textAlignment=NSTextAlignmentCenter;

1 个答案:

答案 0 :(得分:3)

您无法更改单元格字幕标签的NSTextAlignment。原因是这个标签只有文字宽。如果您不相信我,可以尝试设置它的背景颜色:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.textLabel.backgroundColor = [UIColor orangeColor];
}

因此,您可以看到,UILabel根据其中的文字更改了宽度。

官方文件也反对它:

  

单元格的样式,顶部带有左对齐标签,a   在较小的灰色文本中,左对齐标签位于其下方。 iPod应用程序   使用这种风格的细胞。

所以,我可以建议三种不同的方法来实现你的目标:

第一种方式

您可以按照以下教程创建自己的自定义单元格:

您可以自行添加标题标签和副标题,并设置所有属性。

第二种方式

这是另一种解决方法,如果您不想实现自定义单元格,可以使用它。只需使用以下方法:

- (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:CGRectMake(yourX, yourY, yourWidth, yourHeight)];
        myLabel.tag = 1;
        myLabel.textAlignment= UITextAlignmentCenter;

        [cell.contentView addSubview:myLabel];
    }

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

    return cell;
}

第三种方式

您可以实现方法,该方法将在渲染后更改单元格的字幕标签的文本对齐方式。这绝对不是最好的解决方案,但如果你愿意,可以尝试一下:

- (void) updateCenteringForTextLabelInCell:(UITableViewCell*)cell 
{
    UILabel *myLabel = cell.textLabel;
    myLabel.frame = CGRectMake(myLabel.frame.origin.x, myLabel.frame.origin.y, cell.contentView.frame.size.width, myLabel.frame.size.height);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //use your already implemented code
    [self performSelector:@selector(updateCenteringForTextLabelInCell:) withObject:cell afterDelay:0.05];
}

<强>要点:

我建议你使用第一种方式,因为所有其他方法都有点棘手。除此之外,您可以稍后在自定义单元格中添加许多不同的元素,这非常有用。