2014-01-20 93 views
2

我正在嘗試製作一個與XCode 4.2的Twitter客戶端。 (iOS version 5)。我想我的應用程序的主時間軸類似於Twitter的iOS應用的時間表:在iOS應用程序中動態調整表格單元格

Twitter's UI

我使用含標籤和三個按鈕的原型細胞UITableView。下面是我使用的設置高度的代碼:

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
      { 
       static NSString* cellIdentifier = @"TweetContainerCell"; 
       UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
       @try { 
        UILabel* tweetLabel; 
        if(cell != nil) { 
         tweetLabel = (UILabel*)[cell.contentView viewWithTag:1]; 
         NSString* tweetText = tweetLabel.text; 
         CGSize expectedLabelSize = [tweetText sizeWithFont:[UIFont fontWithName:tweetLabel.font.fontName size:20] constrainedToSize:CGSizeMake(CGFLOAT_MIN, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
         //[tweetLabel setFrame:CGRectMake(tweetLabel.frame.origin.x, tweetLabel.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)]; 
         //[cell.textLabel setFrame:tweetLabel.bounds]; 
         //[tweetLabel sizeToFit]; 
         //[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, expectedLabelSize.height)]; 
         //[cell sizeToFit]; 
         NSLog(@"Font size: %f", expectedLabelSize.height); 
         return (expectedLabelSize.height * 2); 
        } 
       } 
       /* Imgur URL: http://i.imgur.com/lHnsAsP.png */ 
       /* http://i.imgur.com/hA9EKfI.png */ 
       @catch (NSException* exception) { 
        NSLog(@"Exception: %@", exception); 
       } 
       return 0; 
      } 

但是,這是我的應用程序最終看起來像:

My application

的問題是:

1 )每個單元格與整個表格中最高的單元格的高度相似,而不是具有不同的高度。

2)因此,單元格的上邊框和文本之間的間距對於每個單元格都不同(因爲iOS垂直居中文本)。

我正在學習iOS發展和無法做這麼簡單的事情,即使經過大量的研究和花費大量的時間,似乎真的令人沮喪。任何幫助是極大的讚賞。

(如果我所提供的信息是不夠的,這是一個包含整個項目的ZIP文件:https://db.tt/m5suxWCj

回答

2

您的問題是你的標籤尚未建立,因爲tableView:heightForRowAtIndexPath:最初tableView:cellForRowAtIndexPath:之前調用,這是您的單元格創建的位置。在tableView:heightForRowAtIndexPath:你應該儘可能有效地確定單元格的高度,而不涉及UIViews。

爲了達到這個目的,您應該在您的表格視圖數據源中的其他地方存儲NSString,並基於此計算expectedLabelSize

另請注意,在IOS 7中不推薦使用sizeWithFont:,因此對於IOS 7及更高版本,您應該使用sizeWithAttributes:代替。