3

私は持っていますtableviewが、どのセルにも長いテキストが表示されていません。さらに奇妙なのは、彼らが停止する設定値ではないように見えることです。一部のセルは、切り取られる前に他のセルよりも多くのテキストを表示します。NSLog()文字列が正しく設定されていることを確認します。

- (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;
}

numberOfLines関数 atがそれを処理するという印象を受けました0が、すべてのセルが 2 行にあり、それ以上ではありません。必要な数の行に調整するにはどうすればよいですか? ありがとう。

4

3 に答える 3

1

UITableViewCell をサブクラス化することをお勧めします。cellForRowAtIndexPath はあまり変更しませんが、

cell = [[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 に置き換えます。

于 2013-01-12T21:32:59.310 に答える
0

より多くの行を表示するには、cell.textlabel とセル自体のフレーム サイズを調整する必要があると思います。新しいテキストに合わせてフレーム サイズを高くする必要があります。2 行のテキストしか収まらない場合は、それがすべて表示されます。必要な行に基づいて高さをプログラムで調整する必要があります。

これは、行数に基づいてそのフレームサイズを動的にする方法を示している人へのリンクです。

于 2013-01-12T21:23:21.160 に答える
0

文字列のセルラベルの高さを計算して、実行時に各行の高さを調整する必要があります。

次の関数は、テーブルビューセルの固定幅でラベルのサイズを提供します

-  (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); 
}

これは、行が作成されるたびに行が動的に高さを調整する場合、最初にその高さを調整します。

これで問題が解決することを願っています。

于 2013-01-12T21:33:57.170 に答える