1

私はUILableでユーザーコメントを表示し、UILableにはsizetofitプロパティがあるアプリケーションに取り組んでいます。UILable の高さに応じてセルの高さを変更したい。

私の質問は、セルの高さを変更する方法です。たとえば、最初のセルの高さは 50、2 番目のセルの高さは 100 などです。

4

4 に答える 4

3

UITableViewCell の動的な高さについては、以下のことを行う必要があります

  • UITableViewCell のすべての制約要件を満たす
  • 以下のコードを使用して、すべてのセルの高さを動的にレイアウトするように TableView に指示します

    - (void)viewDidLoad {
         [super viewDidLoad];
    
         // two magic lines
         tableView.estimatedRowHeight = 89
         tableView.rowHeight = UITableView.automaticDimension
    }
    

わずか 2 行のコードで、コンテンツに一致するセルのサイズを計算し、動的にレンダリングするようにテーブル ビューに指示します。この自己サイジングセル機能により、大量のコードと時間を節約できます。あなたはそれを好きになるでしょう。

于 2015-07-07T05:53:17.793 に答える
0

heightForRowAtIndexPath で、関連するセル データに基づいて動的な高さを計算します。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 { 
     NSDictionary *data = [self.dataSource objectAtIndex:indexPath.row];
     return [MyTableViewCell heightForData:data];
 }

次に、MyTabLeViewCell で、以下のように関数を記述します。データには動的な高さの事実である「コンテンツ」があるとします。そして、あなたのtableViewCellはCONTENT_LABEL_WIDTHでcontentLabelと呼ばれるUILabelを定義しました

+(CGFloat) heightForData : (NSDictionary *)data{

    self.contentLabel.text = [data objectForKey:@"content"];
    CGSize contentLabelSize = [self.contentLabel sizeThatFits:CGSizeMake(CONTENT_LABEL_WIDTH, CGFLOAT_MAX)];

    return contentLabelSize.height;

    //If you want to have a minimum cell height no matter how small your content is, you can use below fmaxf with a pre-defined CELL_MIN_HEIGHT value.
    // return fmaxf(CELL_MIN_HEIGHT, height);
}
于 2015-07-07T07:06:57.663 に答える
0

このメソッドを使用してUITableViewCell高さを動的に増やすことができます (AutoLayout なし)。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSMutableAttributedString *strName = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",strItemName]];

    [strName addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, strItemName.length)];
    CGSize sizeItemName = CGRectIntegral([strName boundingRectWithSize:CGSizeMake(130, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil]).size;
    int padding = 5;
    //your default cell height for ex 55 
    if (sizeItemName.height < 55)
    {
        sizeItemName.height = 55;
    }
    return sizeItemName.height + padding;
}
于 2015-07-07T06:05:14.103 に答える
0

これがテーブルビューメソッドで役立つことを願っています:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     return UITableViewAutomaticDimension;
 }
于 2015-07-07T06:07:08.473 に答える