cell.textLabel没有调整大小

时间:2012-07-03 22:14:49

标签: iphone

我正在尝试为我们的应用创建设置。我不确定这里发生了什么。我有一个UITableViewSyleGrouped,在表的每个部分,有1行。对于我的特定行,它显示了该人的姓名。如果单击它,则会推送到具有可供选择的人员列表的新tableView,然后当您弹回时,标签会更新,但当我从较小的名称变为更大的名称时,标签会被截断。我正在尝试为我们的应用创建设置。一些字段看起来像:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = [indexPath row];
    if (tableView == _settingsTableView) {
        UITableViewCell *cell = nil;

        NSNumber *aSection = [_tableArray objectAtIndex:indexPath.section];

        if ([aSection integerValue] == SOUNDS)
        {
            cell = [tableView dequeueReusableCellWithIdentifier:@"SwitchCell"];
            if (cell == nil)
            {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SwitchCell"] autorelease];
            }
            cell.textLabel.text = @"Sounds";
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
            cell.accessoryView = switchView;
            [switchView setOn:[[Settings sharedInstance] playSounds] animated:NO]; // initialize value from Settings
            [switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
            [switchView release];
        }
        else if ([aSection integerValue] == PERSON) {
            cell = [tableView dequeueReusableCellWithIdentifier:@"PersonCell"];
            if (cell == nil) {
                cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"PersonCell"] autorelease];
            }
            Person *p = [_personArray objectAtIndex:row];
            cell.textLabel.text = [NSString stringWithFormat:@"%@ %@", p.firstName, p.lastName];
                        NSLog(@"cL: %@", NSStringFromCGRect(cell.textLabel.frame));
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
        }
  return cell;
}

我的PERSON部分为用户提供了更改人物的功能。 didSelectRowAtIndexPath中的代码是

else {
    Person *p = [_personArray objectAtIndex:row];
    NSUInteger oldRow = [_lastIndexPath row];
    if (oldRow != row) {
        dmgr.currentPerson = p;

        // Put checkmark on newly selected cell
        UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

        // Remove checkmark on old cell
        UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:_lastIndexPath];
        oldCell.accessoryType = UITableViewCellAccessoryNone;
        [_settingsTableView deselectRowAtIndexPath:_lastIndexPath animated:YES];
        self.LastIndexPath = indexPath;

        // Update the cell 
        NSIndexPath *path = [NSIndexPath indexPathForRow:0 PERSON];
        UITableViewCell *theCell = [_settingsTableView path];

        theCell.textLabel.text = [NSString stringWithFormat:@"%@ %@", p.firstName, p.lastName];
        [theCell setNeedsDisplay];                
        NSLog(@"ceLL: %@", NSStringFromCGRect(theCell.textLabel.frame));

    }
}

在我点击标签之前,标签会被截断。 (例如John D ......而不是John Doe)。为什么标签没有更新?

我试着看框架,我不确定这是否与它有关。我的输出是:

cL: {{0, 0}, {0, 0}}
ceLL: {{10, 11}, {76, 21}}

1 个答案:

答案 0 :(得分:0)

UITableViewCell的textLabel字段是常规UILabel。您可以设置此属性以使其缩小文本以适合:

 theCell.textLabel.adjustsFontSizeToFitWidth = YES;

您还可以设置最小字体大小

 theCell.textLabel.minimumFontSize  = whatever

查看UILabel上的文档,它将对您有所帮助。