2013-02-08 122 views
1

我想創建一個tableview,其中的單元格的高度是動態的。UITableViewCell裏面的UILabel高度

到目前爲止,我設法根據我添加的自定義UILabel設置單元格的高度。

與常規cell.textLabel它工作正常,但是當我使用我自己的標籤出問題了。我只看到了一半的標籤,但是當我上下滾動時,有時標籤會延伸並顯示所有文本......您可以看到標籤應該在圖像中結束的位置。

Image

這是cellForRowAtIndexPath中的文本:

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

// Configure the cell. 
Car *carForCell = [cars objectAtIndex:indexPath.row]; 

UILabel *nameLabel = [[UILabel alloc] init]; 
nameLabel = (UILabel *)[cell viewWithTag:100]; 
nameLabel.numberOfLines = 0; 
nameLabel.text = carForCell.directions; 
[nameLabel sizeToFit]; 

[nameLabel setBackgroundColor:[UIColor greenColor]]; 


return cell; 

回答

1

除非你對你發佈的代碼錯別字,你似乎並沒有在所有添加標籤的單元格。您似乎也會每次創建一個新標籤,然後用單元格的視圖替換指針的內容(始終爲零)。

嘗試做這樣的事情,然後再看看它的樣子:

static NSString *CellIdentifier = @"Cell"; 

UILabel *nameLabel; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 

    nameLabel = [[UILabel alloc] init]; 
    nameLabel.tag = 100; 

    nameLabel.numberOfLines = 0; 
    [nameLabel setBackgroundColor:[UIColor greenColor]]; 

    [cell.contentView addSubview:nameLabel]; 
} 
else { 
    nameLabel = (UILabel *)[cell viewWithTag:100]; 
} 

// Configure the cell. 
Car *carForCell = [cars objectAtIndex:indexPath.row]; 

nameLabel.text = carForCell.directions; 
[nameLabel sizeToFit]; 

return cell; 

您還需要告訴每個單元需要被使用tableView:heightForRowAtIndexPath:委託方法是什麼大小的tableView。這將意味着再次獲得相關的對象Car並使用sizeWithFont:sizeWithFont:forWidth:lineBreakMode:

+0

我已經在'tableView:heightForRowAtIndexPath'方法中設置了單元格的高度,如圖所示。我改變了'cellForRowAtIndexPath'中的代碼,結果如下:[link](http://cl.ly/image/063e3Y0N2E05)。所有的文字都很引人注目,但寬度看起來很亂。 – 2013-02-08 18:36:23

+0

我認爲這是'sizeToFit:'的問題 - 你可以使用'sizeWithFont:sizeWithFont:forWidth:lineBreakMode:'來計算標籤大小嗎? – ChrisH 2013-02-08 18:43:38

+0

似乎工作。在做出正確答案之前,我會再試一試。 :-) – 2013-02-08 18:52:06

0

你是如何設置單元格的高度?它應該在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

+0

計算高度我在'heightForRowAtIndexPath'中設置了高度,它已經很完美了。問題是標籤不能伸展,它只是在細胞中間切割。 – 2013-02-08 18:40:52

0

您應該計算在下面的方法返回的UITableViewCell的高度來完成:

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

在這裏,你應該做你的你的應該多高初始計算。

例如:

CGSize textSize = [myString sizeWithFont:[UIFont systemFontOfSize:16] constrainedToSize:CGSizeMake(320, 9999)]; 
return textSize.height; 
相關問題