动态行高

时间:2011-01-11 17:40:15

标签: iphone uitableview

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@""];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault      reuseIdentifier:CellIdentifier] autorelease];
}
//cell.backgroundView = [[[CustomCell alloc] init] autorelease];
cell.selectedBackgroundView = [[[CustomCell alloc] init] autorelease];

// At end of function, right before return cell:
cell.textLabel.backgroundColor = [UIColor clearColor];


// Configure the cell.
UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(-30, 3, 300, 22)];
UILabel *myLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 22, 310, 200)];
UILabel *myLabel3 = [[UILabel alloc] initWithFrame:CGRectMake(0, 170, 300, 20)];

Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];


    myLabel1.text=aBook.title;
    myLabel2.text=aBook.description;
    myLabel3.text=aBook.pubDate;

    NSString *desc = aBook.description;
    if ([desc isEqualToString:nil]) {
        NSLog(@"nullll lll ");
    }


//myLabel2.textAlignment=UITextAlignmentCenter;              
myLabel2.numberOfLines=5;   
myLabel2.textColor=[UIColor blueColor];
myLabel2.lineBreakMode=UILineBreakModeWordWrap;
myLabel2.font=[UIFont systemFontOfSize:14];
myLabel3.numberOfLines=1;
myLabel1.numberOfLines=1;
myLabel1.textColor=[UIColor redColor];
myLabel1.font=[UIFont systemFontOfSize:20];
myLabel1.shadowColor=[UIColor redColor];
myLabel1.backgroundColor=[UIColor grayColor];
        [cell.contentView addSubview:myLabel1];
        [cell.contentView addSubview:myLabel2];
        [cell.contentView addSubview:myLabel3];
嗨伙计们!我有以下代码,我想从xml文件中显示这个。现在它的工作但静态行高。 如果xml文件没有数据,则将其保留为空白。所以我想根据我使用mylabel1,2,3.text

提供的数据来改变行高

3 个答案:

答案 0 :(得分:2)

正如UITableViewDelegate协议中所指定的,您希望在委托中实现tableView:heightForRowAtIndexPath:方法。在该方法中,您将获得indexPath,因此您可以重复该行

 Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];

获得该书后,您可以检查其属性(看起来像titledescriptionpubDate),然后将其添加到单元格中(稍后会执行) ),您将根据属性值返回计算的单元格高度。

答案 1 :(得分:1)

嗨有一种溶剂尝试NSString的方法。写这是单元格的高度

NSString *text1 = [arrOutline1 objectAtIndex:[indexPath row]];

CGSize constraint1 = CGSizeMake(CELL_CONTENT_WIDTH , 20000.0f);
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
CGFloat YPostion =MAX(size3.height, 44.0f);

cellHeight = cellHeight + YPostion + 20;;

return cellHeight ;

答案 2 :(得分:0)

如果我正确地理解了这个问题(如果我不这样做就道歉),那么:

  1. 在tableView委托中实现tableView:heightForRowAtIndexPath:方法 - 让它计算并为行返回合适的高度;
  2. 配置要添加到contentView的UILabelViews的大小(或者只是从superview中删除)。您可以在tableView:cellForRowAtIndexPath:
  3. 中执行此操作
  4. 确保重新加载表格,或者更好地重新加载已更改的行 - 这会强制tableView再次获取高度
  5. 下面是一个tableView的示例:heightForRowAtIndexPath方法,用于单个节表,根据显示的段落中的文本数量动态调整单元格行的高度。

    - (CGFloat) tableView: tableView heightForRowAtIndexPath: indexPath;
    {   
        CGFloat rowHeight = [self rowHeight:[[self paragraphs] objectAtIndex: [indexPath row]];
        return (rowHeight + EI_CELL_MARGIN);
    }
    

    然后是tableView:cellForRowAtIndexPath:方法中的一个片段。

    NSString* cellText = [[self paragraphs] objectAtIndex: [indexPath row];
    [[cell paragraphController] setText: cellText];
    [[cell paragraphController] adjustFrameToTextSize];
    

    (因为它在这段代码中我为了方便我已经将UITableViewCell子类化了.'dessectionController'只是一个ViewController,其视图被添加到单元格的内容视图中.signingFrameToTextSize方法根据内容的大小重置视图帧显示。)