の中に表示するアイテムの配列がありますUITableViewCell
。これらの各アイテムは、 を使用して動的に表示されますUILabel
。ビューのレイアウトをセットアップするために autolayout を使用します。
これが私のレイアウト方法ですtableViewCell
:
+------------------------------------------------+
| [cellView] |
| +---------------------------------------------+|
| |[otherView] <- fixed height ||
| | +------------------------------------------+||
| | |[UILabel] |||
| | +------------------------------------------+||
| +---------------------------------------------+|
| +---------------------------------------------+|
| |[itemView] ||
| | +---------------------------+ +------------+||
| | |[itemLabel] |-|[priceLabel]|||
| | +---------------------------+ +------------+||
| | +---------------------------+ +------------+||
| | |[itemLabel] |-|[priceLabel]|||
| | +---------------------------+ +------------+||
| | ||
| | --Add the next UILabels dynamically-- ||
| +---------------------------------------------+|
+------------------------------------------------+
明確にするために
otherView
: 中に 2 つUILabel
入っています。高さ固定。itemView
:内部のitemLabel
&の数が不明です。priceLabel
の数に基づいて高さを変更しitems
ます。itemLabel
ビューの各制約は、 &を除いてストーリーボードを使用して設定されますpriceLabel
。
私の中で、私は&を使用して制約をcellForRowAtIndexPath
設定しますitemLabel
priceLabel
constraintsWithVisualFormat:
for (NSDictionary *item in items) {
UILabel *itemLabel = [[UILabel alloc] init];
itemLabel.translatesAutoresizingMaskIntoConstraints = NO;
itemLabel.font = [UIFont systemFontOfSize:14.0f];
itemLabel.backgroundColor = [UIColor yellowColor];
itemLabel.text = [item valueForKey:@"item_name"];
[cell.itemView addSubview:itemLabel];
UILabel *priceLabel = [[UILabel alloc] init];
priceLabel.translatesAutoresizingMaskIntoConstraints = NO;
priceLabel.font = [UIFont systemFontOfSize:14.0f];
priceLabel.textAlignment = NSTextAlignmentRight;
priceLabel.backgroundColor = [UIColor greenColor];
priceLabel.text = [NSString stringWithFormat:@"RM %@", [item valueForKey:@"price"]];
[cell.itemView addSubview:priceLabel];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(cell.itemView, itemLabel, priceLabel);
[cell.itemView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[itemLabel]-5-[priceLabel(70)]|"
options:0
metrics:nil
views:viewsDictionary]];
[cell.itemView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[itemLabel]|"
options:0
metrics:nil
views:viewsDictionary]];
[cell.itemView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[priceLabel]|"
options:0
metrics:nil
views:viewsDictionary]];
}
最終的な結果は以下のとおりです。唯一の問題は、itemLabel
作成された とpriceLabel
が上から下にうまく整列するのではなく、互いに重なり合っていることです。
itemLabel
&priceLabel
が上から下にうまく整列itemView
し、その中のアイテムの数に基づいてサイズが変更されるように、制約を適切に設定するにはどうすればよいですか?