1

TwitterのiOSアプリの登場をモデルにした単純なIRCクライアントを作成しています。参考までに、Twitterアプリのスクリーンショットを撮りました。

これは、各セル内にいくつかのラベルが付いた単純なテーブルビューのように見えます。そのため、私のアプリでは、プログラムでテーブルとセルの書式を作成しています。カスタムセルには2つのラベルしかなく、上下に配置しています。トップラベルはシンプルな1ライナーです。一番下のラベルには、より長いメッセージを含めたいので、指定した幅内にとどまりながら、複数行にワードラップする必要があります。

どうすればこれを達成できますか?

これまで、ラベルのフレームを希望のサイズに明示的に設定しようとしましたが、これがすべての場合、ワードラップは行われません。セルから水平に流れ出るだけです。sizeToFit次に、関数内でこのラベルを呼び出してみtableView:cellForRowAtIndexPath:ましたが、非常に狭い幅でワードラップしているように見えます。テキストは2〜3文字のように折り返され、セルから垂直に流れ出します。

ラベル内のテキストを指定された幅の後に折り返す方法がわからないようです。何か案は?

私のカスタムセルクラス:https ://github.com/ryancole/pound-client/blob/master/pound-client/views/MessageListCell.m

cellForRowAtIndexPath関数:https: //github.com/ryancole/pound-client/blob/master/pound-client/controllers/MessageListViewController.m#L62-L84

編集1:

無制限に0に設定したときに何が起こったかを示すnumberOfLinesために、呼び出されているスクリーンショットを添付しました。UILabelのフレームの指定された幅を最初に使用するのではなく、数文字後に折り返します。これは、と呼ばれる前に設定されていsizeToFitます。

4

1 に答える 1

6

numberOfLinesを必要な行数に設定するか、0に設定して無制限の行数を許可する必要があります(デフォルトは1)。また、lineBreakModeをNSLineBreakByWordWrappingに設定する必要がある場合もあります(これがデフォルトの場合もあります)。

編集後:テキストを上から開始する場合は、カスタムセルに明示的なサイズを設定するのではなく、可変の高さのセルを使用する必要があると思います。私は自分のプロジェクトの1つでこのようにそれを行いました:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UILabel *label = [[UILabel alloc] init];
    label.numberOfLines = 0; // allows label to have as many lines as needed
    label.text = _objects[indexPath.row][@"detail2"];
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(300, 300000) lineBreakMode:NSLineBreakByWordWrapping];
    CGFloat h = labelSize.height;
    return h + 50;
}

ここで作成するラベルは、行の高さを計算するためだけのものであり、このメソッドが終了すると破棄されます。セルの幅は、constrainedToSize:パラメーターにある300引数によって決まります。+50は、セルを正しく表示するために追加した単なるファッジファクターでした。おそらく、その数値をいじって、必要なものを取得したいと思うでしょう。カスタムセルクラスでは、initWithStyle:reuseIdentifierを使用し、サイズを設定しませんでした。

于 2012-12-28T20:39:55.857 に答える