2015-12-09 137 views
1

我想製作一個消息應用程序。我有一個tableview,我必須從JSON webservice添加所有消息。我正在使用從UITalbeViewCell繼承自定義單元格的自定義類。如何在iOS中設置UITableView自定義單元的高度?

我沒有這個自定義類的任何nib文件。我只創建這個類的對象,並將其消息標籤文本設置爲「cellForRowAtIndexPath」委託方法中的單元格。

現在我面臨一個問題,即自定義類根據消息的長度返回完美的佈局消息單元格,並且其高度也很完美,但是當此單元格在UITableView中添加時,行的高度不會自動設置爲自定義單元格的高度,這就是爲什麼較大的文本單元格重疊。請在這方面幫助我,我如何設置自定義單元格的高度。

你可以看到細胞重疊

enter image description here

enter image description here

+0

希望你已經實施了價值 - (CGFloat的)的tableView:(UITableView的*)的tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath –

+0

我試着用這兩種方法來實現這個方法,並返回行高77而不實現這個方法。現在我沒有使用這種方法,我只通過選擇我的表格視圖從文件檢查器中指定「行高」爲77。 – mwaqas01

回答

0

實現此方法並返回基於文本的長度計算前行高度誤差圖像。

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSInteger nofLines; 
    nofLines = [self getNOFLinesForLabel:296 usingFont:font forText:fullDescription]; 
    return nofLines*13; 
} 

-(NSInteger) getNOFLinesForLabel:(CGFloat)width usingFont:(UIFont *)font forText:(NSString *)text { 


    CGRect rect = [text boundingRectWithSize:CGSizeMake(200, MAXFLOAT) 
            options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:@{NSFontAttributeName : font} 
            context:nil]; 

    return ceil(rect.size.height/font.lineHeight); 
} 

調整您的標籤寬度,字體大小和其他參數,它將開始porperly工作。

+0

「return ceil(rect.size.height/font.lineHeight)」中的「ceil」是什麼? – mwaqas01

+0

「ceil」和「floor」是用於循環浮點值的數學庫函數。 ceil返回下一個更大的整數,例如ceil(2.4)將返回3;在地板剛剛移除小數部分例如地板(2.4)將返回2。 –

1

你需要計算高度爲每個單元heightForRowAtIndexPath委託方法並返回像下面

- (CGFloat)tableView:(HBTableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGRect textRect = [<YOUR_MESSAGE> boundingRectWithSize:boundingSize options:NSStringDrawingUsesFontLeading attributes: @{NSFontAttributeName:<LABEL_FONT>} context:nil]; 
    return textRect.size.height + <PADDING_LABEL>; 
    //PADDING_LABEL = CELL_DEFAULT_HEIGHT-LABEL_DEFAULT_HEIGHT 
} 
相關問題