在iOS中的UITableView中换行文本

时间:2011-11-05 19:07:56

标签: iphone objective-c ios uitableview

我想在UITableView中包装单元格的文本。我正在使用以下代码,但是现在如何动态更改单元格的高度,单元格的对齐现在不正确?我注意到tableView委托中有一个内置方法 - (CGFloat)cellHeightForRow但我可以动态接收文本并设置高度,因为我的JSON数据中有可变长度的文本

  

- (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] autorelease];  
    }  
    [cell.textLabel sizeToFit];
    cell = [[[UITableViewCell alloc]
             initWithStyle: UITableViewCellStyleSubtitle
             reuseIdentifier: @"UITableViewCell"] autorelease];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

    NSDictionary *person = [myPeople objectAtIndex:[indexPath row]]; 

    NSString *name = [person valueForKey:@"name"];
    cell.detailTextLabel.text = [person valueForKey:@"time"];
    return cell; 
}

这是我到目前为止所尝试的:

  

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSDictionary *person = [myPeople objectAtIndex:[indexPath row]]; 
    NSString *cellText    =[person valueForKey:@"text"];
    UIFont *cellFont      = [UIFont fontWithName:@"Helvetica-neuve" size:21.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize      = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    int buffer  = 10;
    return labelSize.height + buffer;
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";  

    UITableViewCell *cell = [commentView dequeueReusableCellWithIdentifier:CellIdentifier];  
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.textLabel.numberOfLines = 6;
        cell.textLabel.font          = [UIFont fontWithName:@"Helvetica-neuve" size:21.0];
        [cell.textLabel setMinimumFontSize:13.0];
        [cell.textLabel setAdjustsFontSizeToFitWidth:NO];
    } 

    NSDictionary *person = [myPeople objectAtIndex:[indexPath row]]; 

    NSString *personName = [person valueForKey:@"text"];
        cell.textLabel.text = personName;
   // cell.detailTextLabel.text = [person valueForKey:@"date"];

    return cell; 
}

输出仍然看起来太紧凑和紧张

2 个答案:

答案 0 :(得分:15)

cellForRowAtIndexPath:功能中。第一次创建单元格时:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.font          = [UIFont fontWithName:@"HelveticaNeue" size:21.0];
}

您会注意到我也将标签的行数设置为0.这样可以使用尽可能多的行。

您还需要指定UITableViewCell的大小,在heightForRowAtIndexPath函数中也是如此:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText    = @"some text which is part of cell display";
    UIFont *cellFont      = [UIFont fontWithName:@"HelveticaNeue" size:21.0];    
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize      = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
    int buffer  = 10;
    return labelSize.height + buffer;
}

我在返回的单元格高度上添加了额外的10,因为我喜欢在文本周围添加一点缓冲区。

更新:如果输出看起来太紧& clumpsy然后这样做 -

[cell.textLabel setMinimumFontSize:13.0];
[cell.textLabel setAdjustsFontSizeToFitWidth:NO];

这可以解决您的问题。

答案 1 :(得分:0)

要更改单元格的高度,您需要在cellForRowAtIndexPath中更改其框架,并确保标签具有正确的自动调整大小标记。