2

カスタムUITableViewCellを作成していて、入力の長さに応じて可変の高さが必要な場合 (たとえば、Twitter リーダーなど)、どうすればこれを機能させることができますか?

ここで、標準の非カスタムセルに設定できる他の多くの例を見つけましたが、セルのメインテキストラベルは小さいなどなので、セルでこれらのメソッドのいずれかを使用しようとすると、さまざまな奇妙な結果が得られる (テキストがセルの下部に重なるなど)

セルを設計する標準化された方法はありますか (たとえば、Interface Builder でどのくらいの高さにする必要がありますか?)、ラベルがそのセルの幅の半分であるとしましょう.セルの高さを計算するにはどうすればよいですか?そのラベルに読み込まれた文字列を表示する必要がありますか? ここで私が見つけた方法は、通常のセルではうまく機能しますが、奇妙な高さ、テキストの重なりなどでカスタムのものを台無しにします:こちらもよろしくお願いします!)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    CGSize  textSize = {300.f, 200000.0f};
    CGSize  size = [[_quoteStringsFromPlist objectAtIndex: indexPath.row] sizeWithFont: [UIFont systemFontOfSize:12.0f] constrainedToSize: textSize lineBreakMode: NSLineBreakByWordWrapping];
    size.height += 5.0f;
    float result = MAX(size.height, 32.0f);
    return result;
}
4

2 に答える 2

0

まず、xib ファイルに移動して、テキスト領域の上/下マージンの大きさと幅を確認します。

その後、利用可能な幅で必要な高さを計算し、その値をテキスト領域の上部/下部マージンに追加する必要があります。

IB の各セルのサイズやセルに入力しようとしているテキストに関係なく、結果は正しく表示されます。

編集

セル サイズが{700, 300}IB にあり、テキスト エリアが にあり、{{100, 100}, {300,100}}テキスト エリアの上部マージンが 100 ピクセル、下部マージンが 100 ピクセルで、幅が 300 であるとします。

テキストに必要な高さを計算するときは、利用可能な 300 幅で計算します。{300, 250} のようなサイズが返されます。その 250 はテキストに必要な高さですが、セルには他の要素が含まれており、それに上マージンと下マージンを追加する必要があるため、結果は 450 になります。

テキスト領域が垂直方向に伸び、余白が固定されるように、自動サイズ変更マスクまたは自動レイアウトを設定することを忘れないでください ( UIViewAutoresizingFlexibleHeight)

于 2013-02-15T12:35:26.547 に答える
0

このようなものがうまくいくはずです。

CGRect labelFrame = // enter default frame of the label here
UIFont *labelFont = // enter label font here
CGFloat labelBottomMargin = // enter the space between the bottom of the label and the bottom of the cell here

CGSize  size = [labelString sizeWithFont:labelFont constrainedToSize:CGSizeMake(labelFrame.size.width, MAX_FLOAT)];
size.height += labeFrame.origin.y;
size.height += labelBottomMargin;
size.height = MAX(size.height, 32.0f);
return size.height;
于 2013-02-15T12:52:31.287 に答える