TableViewにAutoLayoutで可変のUILabelを設置する際にハマったので解決方法をメモします。
やりたいこと
AutoLayoutを使い可変のUILabelの幅をピッタリのサイズにします。
Content Hugging Priorityを設定する
以下のようなAutoLayoutを設定すると可変のLabel Bが伸びてしまいます。
Label B の Horizonal の Content Hugging Priority が Label Aより低いのが原因です。
以下のようにPriorityを上げると Label Bは伸びません。
コードでAutoLayoutのConstraints(制約)のconstant(値)をセットする
UITableViewのCellは再利用されるのでConstraints(制約)のconstant(値)がセル毎に違う場合はコードから指定する必要があります。
※ setNeedsLayout、layoutIfNeededではダメでした
今回の例ではLabel Bの幅のConstraints(制約)のconstant(値)をコードで設定します。
まずはConstraints(制約)をOutletでつなぎます。
sizeThatFitsを使いUILabelの幅を取得してOutletでつないだConstraintsに値をセットします。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"UYVoiceTableViewCell";
UYVoiceTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
〜省略〜
CGSize maxSize = CGSizeMake([UYUtil getScreenSize].width,[UYUtil getScreenSize].height);
CGSize iineLabelSize = [cell.iineLabel sizeThatFits:maxSize];
cell.iineLabelConstraintsWidth.constant = iineLabelSize.width;
return cell;
}