2014-07-21 83 views
1

內細胞高度我用UITableView顯示來自數據庫的項目,我已經創建了自定義UITableViewCell其中有幾個標籤。我最大的標籤是名稱說明。
每個單元可以有不同的高度,但我想不出如何設置動態的單元格高度。
我得到的是三個點在標籤和高度單元的結束總是約50
如何使基於它裏面的標籤上單元格高度?
如何設置基礎上的UILabel自定義單元格

#define FONT_SIZE 14.0f 
#define CELL_CONTENT_WIDTH 320.0f 
#define CELL_CONTENT_MARGIN 10.0f 

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

    NSString *text = _orderProperty.Description; 

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] 
        constrainedToSize:constraint 
         lineBreakMode:NSLineBreakByWordWrapping]; 

    CGFloat height = MAX(size.height, 44.0f); 

    return height + (CELL_CONTENT_MARGIN * 2); 
} 

UPDATE

static NSString *CellIdentifier = @"orderDetailCell"; 

    OrderDetailCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if(cell == nil){ 
     [tableView registerNib:[UINib nibWithNibName:@"OrderDetailCustomCell" bundle:nil] forCellReuseIdentifier:CellIdentifier]; 
     cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    } 

    OrderProperty* item = [_list objectAtIndex:indexPath.row]; 

    cell.Title.text = item.Title; 

    NSString* _description = item.Description; 

    cell.Description.text = _description; 
+0

看到此鏈接的用戶 「2014」 回答http://stackoverflow.com/questions/17358322/tableview-convertpoint-fromview-奇怪的行爲和解決方法/ 17359673#17359673 –

回答

0

你可以嘗試這樣的事情

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    int rowHeight =0.0f; 
    NSString *stringToSize=[NSString stringWithFormat:@"%@",longStringValue]; 
    CGSize size = [stringToSize 
        sizeWithFont:[UIFont systemFontOfSize:15.0f] 
        constrainedToSize:CGSizeMake(300, 6000) 
        lineBreakMode:NSLineBreakByWordWrapping]; 
    rowHeight = size.height+10; 
    return rowHeight; 
} 

你可以從陣列得到longStringValue您正在使用的數據源爲您的桌面

0

sizeWithFont現不推薦使用,請使用以下方法根據標籤內的文字設置銷售高度。

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

    OrderProperty* item = [_list objectAtIndex:indexPath.row]; 

    NSString *text = item.Description; 

    NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[UIFont fontWithName:@"Helvetica" size:13] forKey:NSFontAttributeName]; 

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    CGSize expectedLabelSize = [content boundingRectWithSize: constraint options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributes context:nil].size; 

    return expectedLabelSize.height+CELL_CONTENT_MARGIN * 2); 
} 

顯然你需要調整字符串的屬性,以適應你正在使用的任何東西。這些只是用於計算電池所需的高度。

+0

它接近,這是接近解決方案。當我用表格加載視圖時,一些長的字符串單元格被截斷。但是在向下滾動後,它會修正高度。爲什麼會發生? – 1110

+0

你可以忍受你的cellForRowAtIndexPath方法嗎?通常要檢索該單元格中的文本,您將獲得基於indexPath的文本。你的cellForRow細節可能會幫助我看看是否是這種情況 –

+0

好的,謝謝你。如果你可以添加一行OrderProperty *項目= [_list objectAtIndex:索引路徑 - 這將意味着電池拿起正確的單元格中正確的文本。讓我知道它現在是否有效。乾杯 –

0

您可以使用下面的NSString範疇,它使用NSTextContainerNSTextContainer計算確切大小的文字。

NSString+Calculation.m

而且你的最終代碼會是這樣:

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

    NSString *text = _orderProperty.Description; 

    CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); 

    CGSize size = [text usedSizeForMaxWidth:constraint.width 
            withFont:[UIFont systemFontOfSize:FONT_SIZE]]; 

    CGFloat height = MAX(size.height, 44.0f); 

    return height + (CELL_CONTENT_MARGIN * 2); 
} 
相關問題