2014-11-21 43 views
0

我很努力如何在uitableviewcell內動態調整uilabel的大小,並根據我放入標籤的文本調整表格單元格的高度。我想在tableview單元格中顯示一個完整的字符串,對於所有的單元格總是以相同的字體大小顯示。這看起來很標準,但我注意到很多討論/辯論/對stackoverflow的不滿。我開始與這些職位:動態調整大小的多行UILabel和附帶的表格視圖單元編程方式

Resize Custom cell with a UILabel on it based on content text from JSON file(@塞牙的答案) boundingRectWithSize for NSAttributedString returning wrong size(@ JOM的答案)

我試圖使用的功能是什麼塞牙沒有副本,幾乎沒有修改。但是,我發現雖然該功能爲不同的單元格打印出不同的高度,但我看到的每個標籤都有1行文本,即使它們應該顯示很多行。另外,奇怪的是,一個單元格的文本似乎顯示在另一個單元格的頂部 - 不確定這是否相關。

我的2個問題:(1)爲什麼我只看到第一行文字? (2)爲什麼UILabel/cell沒有按照我在日誌中打印的不同高度來調整大小(或者它們調整大小,但是被問題#1掩蓋了)?

這裏的三種功能,我使用(這些連同廈門國際銀行 - 可以在廈門國際銀行是什麼問題?):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
JudgeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"JudgeCell"]; 
    if(!cell) 
    { 
     [tableView registerNib:[UINib nibWithNibName:@"JudgeCell" bundle:nil] forCellReuseIdentifier:@"JudgeCell"]; 
     cell = [tableView dequeueReusableCellWithIdentifier:@"JudgeCell"]; 
    } 

    cell.username.text = self.object.answerUser[indexPath.row]; 
    cell.answer.text = self.object.answerArray[indexPath.row]; 

    NSString *text = cell.answer.text; 
    CGSize constraint = CGSizeMake(50, 20000.0f); 
    CGSize size = [self frameForText:text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:constraint]; 

    cell.username.frame = CGRectMake(10, 10, 50, size.height); //MAX(size.height, 14.0f)); 

    return cell; 

} 

-(CGSize)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size { 

    NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
    paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping; 

    NSDictionary * attributes = @{NSFontAttributeName:font, 
            NSParagraphStyleAttributeName:paragraphStyle 
            }; 


    CGRect textRect = [text boundingRectWithSize:size 
             options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) 
             attributes:attributes 
             context:nil]; 

    NSLog(@"size is %f ", textRect.size.height); 
    return textRect.size; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 
{ 
    NSString *text = self.object.answerArray[indexPath.row]; 
    CGSize constraint = CGSizeMake(50, 20000.0f); 
    CGSize size = [self frameForText:text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:constraint]; 
    CGFloat height = size.height; //MAX(size.height, 14.0f); 
    NSLog(@"size is %f AT INDEX %d", height, indexPath.row); 
    return height + 20; 
} 

感謝您的諮詢!

+0

您是否嘗試致電[cell setNeedsDisplay]?在cellForRowAtIndexPath中設置新大小後? – Priyatham51 2014-11-21 00:48:46

+0

@ Priyatham51是的,我也試過,但沒有奏效。 – 2014-11-21 16:12:11

回答

0

最後,我刪除了相關的筆尖文件,並以某種方式,似乎這樣的伎倆與本教程中的代碼(這是類似於我上面已經貼)沿:

http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/

請注意,本教程中的方法有時會被標記爲已棄用。如果我找到更新的教程,我會發布。

相關問題