2014-06-21 61 views
0

我將要開發一個定製的電池在使用該方法的實現代碼如下:的UITableView獲取自定義單元格高度

http://www.appcoda.com/ios-programming-customize-uitableview-storyboard/

我的關注開始之前,我這是下面的。

單元格將包含三個標籤,在某些情況下標籤非常短,在某些情況下標籤很長。

這樣做的效果是細胞的高度可能會有相當大的變化。

有反正我能得到

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 

呼叫

或者是有什麼我試圖做一個更好的方法的單元格的高度。

謝謝

+0

你需要改變單元格的高度嗎?那是動態高度表嗎? – Balu

+0

理想情況下,一些細胞會很小,很短的文字,其他細胞很長,但是如果我把它們全部放在最大高度,那麼真的很短的那些看起來很空洞,如果這樣做有意義 –

+0

可以將它放到透視圖中,將是2行,長標籤可以是40-50行 –

回答

0

更好的方法是在渲染視圖之前計算高度。

例如你有三個標籤數據如下:

  1. 標題
  2. 字幕
  3. 說明

我將做什麼是計算每個字符串的大小:

UIFont *yourFont = // [UIFont ...] 
CGSize stringBoundingBox = [someString sizeWithFont:yourFont]; 

我將接着該大小存儲在我的與相應的數據(標題,副標題,描述)的密鑰數據的堆疊,所述密鑰將

  1. titleSize //爲標題
  2. 爲subTitleSize //字幕
  3. descriptionSize

的NSArray中的項目將是這樣的:

@{ 
    @"titleSize" : [NSValue valueWithCGSize:(CGSize)titleSize], 
    @"subTitleSize" : [NSValue valueWithCGSize:(CGSize)subTitleSize], 
    @"descriptionSize" : [NSValue valueWithCGSize:(CGSize)descriptionSize], 
    @"title" : title, //the NSString data 
    @"subTitle" : subTitle, //the NSString data 
    @"descriptionSize" : descriptionSize, //the NSString data 

} 

在這裏你可以有:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath{ 
     NSDictionary *item = stack[indexPath.row]; 
     CGSize titleSize = [item[@"titleSize"] CGSizeValue]; 
     CGSize subTitleSize = [item[@"subTitleSize"] CGSizeValue]; 
     CGSize descriptionSize = [item[@"descriptionSize"] CGSizeValue]; 

     //calculate the correct height and stuff. 
     ........... 

    return height; 
} 

你可以創建一些常量或方法來獲得您將會有的邊距和填充。

這個解決方案的美妙之處在於你將會計算一次。但是,如果您的數據更新爲給定項目,您需要重新計算您的大小並重新加載您的tableview。

相關問題