0

テーブル セルを含む nib があり、そのテーブル セル内に UILabel があります。そのラベルを sizeToFit にしたいのですが、これは私がしなければならないことを意味します:

- (void)viewDidLoad {
    [self sizeToFit];
}

ただし、私のラベルにはコードがなく、コントローラーの変数へのアウトレットがあるだけなので、そのコードを配置してラベルに影響を与える場所はありません。

UILabel のサブクラス (fitUILabel : UILabel) を作成しようとした後、ペン先のラベルをクリックしてそのクラスを fitUILabel に設定しましたが、実行されていないようです。

cellForRowAtIndexPath の return ステートメントの直前のコントローラーで、入れてみました

 [cell.myLabelOutletVariable sizeToFit]

これは機能しているようですが、リサイクルされた行でのみ機能し、テーブルの最初のセルに含まれるラベルでは機能しません。これにより、テキストがセルからすぐに流れ出し、他のセルに重なるようにも見えますが、それは私が望んでいた上に揃えられます。

4

3 に答える 3

1

nib にはUITableViewCellトップレベル オブジェクトとして a が含まれており、テーブル ビュー セルにはUILabelサブビューがあることを意味していると思います。

viewDidLoadメソッドは で定義されておりUIViewController、からUITableViewCell継承されませんUIViewController

UITableViewCellのサブクラスですUIView。ビューがそのサブビューのフレームを調整する適切な場所は、そのlayoutSubviewsメソッドにあります。UITableViewCellのサブクラスを作成し、ペン先のセルのカスタム クラスとして設定する必要があります。次に、サブクラスで次のメソッドを定義します。

- (void)layoutSubviews {
    [self.label sizeToFit];
}

テーブル ビュー データ ソースのtableView:cellForRowAtIndexPath:メソッドでsetNeedsLayoutは、ラベルのテキストを設定した後にセルに送信することができます。layoutSubviewsこれにより、セルが再利用されている場合に、セルが再び受信することが保証されます。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCell *cell = ...;

    cell.customLabel.text = [self labelTextForIndexPath:indexPath];
    [cell setNeedsLayout];
    return cell;
}

UILabelまたは、次のようにサブクラスを作成することもできます。

@implementation MyLabel

- (void)layoutSubviews {
    [self sizeToFit];
}

- (void)setText:(NSString *)text {
    [super setText:text];
    [self setNeedsLayout];
}

@end

次にMyLabel、ペン先のラベルのカスタム クラスとして設定します。しかし、ビューに独自のフレームを設定するのlayoutSubviewsは少し怪しいので、通常は避けます。

于 2013-04-27T05:05:57.140 に答える
0

ラベルを初期化するための -(void) awakeFromNib メソッドを書き直すことができます。

于 2013-04-27T05:39:25.920 に答える
0

ラベルのサイズを変更するコードは、viewDidLoad ではなく、テーブル ビューのデリゲート メソッド CellForRowAtIndexPath に配置する必要があります。ラベルがテーブル ビュー セルにある場合。

于 2013-04-27T05:03:07.083 に答える