2013-01-12 203 views
2

我有一個tableview但沒有任何單元顯示更長的文本。更奇怪的是,它似乎並沒有成爲一個定價。有些單元在被切斷之前顯示的文本比其他單元更多。 NSLog()確認字符串設置正確。UITableViewCell不顯示全文

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    //code for getting string removed for readability 

    // Identifier for retrieving reusable cells. 
    static NSString *cellIdentifier = @"MyCellIdentifier"; 

    // Attempt to request the reusable cell. 
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    // No cell available - create one. 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 

     // format it 
     cell.textLabel.numberOfLines = 0;   
     cell.textLabel.font = [UIFont systemFontOfSize:12.0]; 
     cell.textLabel.lineBreakMode = UILineBreakModeWordWrap; 
    } 

    // Set the text of the cell to the row index. 
    cell.textLabel.text = fulltext; 

    return cell; 
} 

我的印象是在0numberOfLines功能會處理,但所有的細胞都在2線,沒有更多的。我如何讓它們根據需要調整到儘可能多的行數?謝謝。

+0

'[NSString stringWithFormat:@「%@」,fulltext'是不必要的,只需使用'fulltext'即可。 – zaph

+0

是的,我在做實驗時就這麼做了,現在剛剛抓住它,已經改變了它。我也添加了cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;但它仍然沒有包裝。 –

+0

您可能需要使單元高度更大,並使UILabel高度更大。 – zaph

回答

0

我想爲了讓它顯示更多的線條,你必須調整cell.textlabel和單元格本身的框架大小。你必須使他們的框架尺寸更高,以適應新的文本。如果只有兩行文字會適合,那就是它將要顯示的內容。您必須以編程方式根據所需的線條調整高度。

這是一個link給一個展示如何根據行數來製作動態幀大小的人。

0

我建議子類UITableViewCell。 不要改變太多的cellForRowAtIndexPath但

細胞= [[MyVeryOwnTableCell的alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

假設您的UITableViewCell的子類是MyVeryOwnTableCell。

在MyVeryOwnTableCell的實現中,您應該覆蓋layoutSubViews方法。首先調用[super layoutSubViews],然後相應地重新排列textLabel的框架。你可能不需要改變位置,但高度和數字線。另外你可能想要設置一個合適的lineBreakMode。有關詳細信息,請參閱文檔。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UILabel_Class/Reference/UILabel.html

計算文本的大小以下這種模式:

CGSize textSize; 
textSize = [textLabel.text sizeWithFont:... constraintToSize:CGSizeMake(300.0f, 10000.0f) lineBreakMode: ...]; 

你做內你的執行layoutSubViews你可能有,當你有,如果要覆蓋heightForRowAtIndexPath使用它以類似的方式該單元的總大小太小。

這裏的訣竅是,在開始時,您會根據UILabel的寬度給出尺寸約束(因此300.0可能不適合您),再加上一些或多或少的無盡高度。您將返回文本所需的實際大小(在此情況下,最大值爲10000)。然後使用該高度/大小分別設置標籤的實際大小,以計算顯示文本所需的單元總高度以及可能的其他附加項目。

實施例:

textLabel setFrame:CGRectMake(10.0f, 10.0f, 300.0f, textSize.height); 

關於300.0f。如果您仍想使用UITableViewCell的自動佈局功能(在設置圖像的情況下動態重新對齊標籤),請將其替換爲textLabel.frame.size.width。

0

您必須在運行時通過計算單元格標籤wrt字符串的高度來調整每行的高度。

繼功能給出ü拉布勒的大小與表視圖細胞的固定寬度

- (CGSize) calculateLabelHeightWith:(CGFloat)width text:(NSString*)textString 
{ 
    CGSize maximumSize = CGSizeMake(width, 9999); 
    CGSize size = [textString sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:14] 
         constrainedToSize:maximumSize 
          lineBreakMode:UILineBreakModeWordWrap]; 
    return size; 
} 

使用表格單元格高度委託方法

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Get String for corresponding Row 
    NSString *stringObject=fullText; 
    //here i ave taken row width 320 
    CGSize rowSize=[Utils calculateLabelHeightWith:320 text:stringObject]; 

    return (rowSize.height+20); 
} 

如果行動態每當創建行,這將調整TE高度它會先調整它的高度。

我希望這會解決你的問題。

+0

rowLblHeight和rowSize在哪裏聲明? –

+0

哦,它是我的錯,它是我的代碼中的一行。你不需要該行請刪除它。我也編輯了我的答案 –