LoginSignup
20
19

More than 5 years have passed since last update.

TableViewにAutoLayoutで可変のUILabelを設置する

Last updated at Posted at 2016-01-07

TableViewにAutoLayoutで可変のUILabelを設置する際にハマったので解決方法をメモします。

やりたいこと

AutoLayoutを使い可変のUILabelの幅をピッタリのサイズにします。

IMG_0202.png

Content Hugging Priorityを設定する

以下のようなAutoLayoutを設定すると可変のLabel Bが伸びてしまいます。

スクリーンショット 2016-01-07 14.52.36.png

スクリーンショット 2016-01-07 14.53.01.png

Label B の Horizonal の Content Hugging Priority が Label Aより低いのが原因です。

以下のようにPriorityを上げると Label Bは伸びません。

スクリーンショット-2016-01-07-16.08.35.png

コードでAutoLayoutのConstraints(制約)のconstant(値)をセットする

UITableViewのCellは再利用されるのでConstraints(制約)のconstant(値)がセル毎に違う場合はコードから指定する必要があります。
※ setNeedsLayout、layoutIfNeededではダメでした

今回の例ではLabel Bの幅のConstraints(制約)のconstant(値)をコードで設定します。
まずはConstraints(制約)をOutletでつなぎます。

スクリーンショット 2016-01-07 16.16.32.png

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;
}

20
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19