私はUILableでユーザーコメントを表示し、UILableにはsizetofitプロパティがあるアプリケーションに取り組んでいます。UILable の高さに応じてセルの高さを変更したい。
私の質問は、セルの高さを変更する方法です。たとえば、最初のセルの高さは 50、2 番目のセルの高さは 100 などです。
私はUILableでユーザーコメントを表示し、UILableにはsizetofitプロパティがあるアプリケーションに取り組んでいます。UILable の高さに応じてセルの高さを変更したい。
私の質問は、セルの高さを変更する方法です。たとえば、最初のセルの高さは 50、2 番目のセルの高さは 100 などです。
UITableViewCell の動的な高さについては、以下のことを行う必要があります
以下のコードを使用して、すべてのセルの高さを動的にレイアウトするように TableView に指示します
- (void)viewDidLoad {
[super viewDidLoad];
// two magic lines
tableView.estimatedRowHeight = 89
tableView.rowHeight = UITableView.automaticDimension
}
わずか 2 行のコードで、コンテンツに一致するセルのサイズを計算し、動的にレンダリングするようにテーブル ビューに指示します。この自己サイジングセル機能により、大量のコードと時間を節約できます。あなたはそれを好きになるでしょう。
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);
}
このメソッドを使用して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;
}
これがテーブルビューメソッドで役立つことを願っています:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}