2011-03-26 68 views
2

UILabel內部的UITableViewCell。在單元格水龍頭上,高度展開,並出現第二個不同數量的數據。帶有 - [sizeWithFont:constrainedToSize:lineBreakMode]的UILabel正在切斷

問題是,如果換行,sizeWithFont:constrainedToSize:lineBreakMode:沒有返回正確的高度並切斷底線。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    labelExpanded = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease]; 
    labelExpanded.font = [UIFont boldSystemFontOfSize:11]; 
    labelExpanded.textAlignment = UITextAlignmentLeft; 
    labelExpanded.lineBreakMode = UILineBreakModeWordWrap; 
    labelExpanded.numberOfLines = 0; 
    [cell.contentView addSubview:labelExpanded]; 

    CGSize constraint = CGSizeMake(300, 20000); 
    CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

    [labelExpanded setText:expandedDetails]; 
    [labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if(// Row is Expanded) 
    { 
     CGSize constraint = CGSizeMake(300, 20000); 
     CGSize size = [sameTextAsLabel sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

     // I found +8 to height added nice padding 
     CGFloat height = size.height + 8; 
    } 
    else // Row is not expanded 
     return 30; 
} 

相同的文本被饋送到兩個,它由具有多個新的行\n字符串。如果該行比寬度長,則自動換行功能會執行其作業,但在計算其動態高度時,將無法包含被包裝的行。

如果我添加任何值到[labelExpanded setFrame:height][size.height + 30]我的包裝線顯示。但是,如果該行未被包裝,則會添加不必要的空白。

我一直沒能在網上找到這個解決方案。

回答

7

有一兩件事我注意到的是,你計算基礎上,300的寬度大小,但在248

+2

* facepalm,去睡覺* – 2011-03-26 00:44:44

+0

@MikeGabriel:不要太擔心,我們都做到了。 – Anomie 2011-03-26 00:56:30

3
CGSize constraint = CGSizeMake(300, 20000); 
    CGSize size = [expandedDetails sizeWithFont:[UIFont boldSystemFontOfSize:11] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; 

    [labelExpanded setText:expandedDetails]; 
    [labelExpanded setFrame:CGRectMake(16, 30, 248, size.height)]; 

爲什麼標籤框架寬度248和約束寬度300大小的標籤?

+0

* facepalm,去睡覺* – 2011-03-26 00:45:41