2016-08-08 14 views
0

私はUITableviewCellをカスタマイズしました。内部にはタイトルラベルと詳細ラベルがあります。カスタマイズされたUITableViewCell更新サブビュー

今、コンテンツに応じて詳細ラベルの属性を調整したいと考えています。 文字列サイズがフレームより大きい場合は、行数を2に設定します。

セルクラスのcellForRowAtIndexPathまたはlayoutSubViewsにコードを挿入しようとしました。

コードの一部は、それが実際にあれば条件を通過したが、ラベルの設定は動作しません

TransportationViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
UIFont* font = cell.detailLabel.font; 
NSDictionary* attribute = @{NSFontAttributeName:font}; 
const CGSize textSize = [cell.detailLabel.text sizeWithAttributes: attribute]; 

if (textSize.width > cell.detailTextLabel.frame.size.width && cell.detailLabel.numberOfLines == 1) { 

    NSLog(@"%lf, %lf, %lu", cell.detailLabel.frame.size.width, textSize.width, (long)cell.detailLabel.numberOfLines); 
    cell.detailTextLabel.font = [UIFont systemFontOfSize:8]; 
    cell.detailTextLabel.numberOfLines = 2; 

    [cell setNeedsLayout]; 
} 

のようなものです。

+1

おそらく、あなたはdetailLabelとdetailTextLabelを混乱させるでしょうか? 2番目のことは、ここで '[cell setNeedsLayout]'を呼び出す必要がないということです。 – Nikita

答えて

1

書き込みがビューに= 0 cellForRowAtIndexpath cell.detailTextLabel.numberOfLinesで

self.theTableView.estimatedRowHeight = 100; 
self.theTableView.rowHeight = UITableViewAutomaticDimension; 

[self.theTableView setNeedsLayout]; 
[self.theTableView layoutIfNeeded]; 

をdidload。

0

が、これはあなたの問題を解決しますnumberOfLines = 0;

を設定します。

編集1:動的高さを計算するためのコード。

CGSize boundingBox = [label.text boundingRectWithSize:constraint 
               options:NSStringDrawingUsesLineFragmentOrigin 
              attributes:@{NSFontAttributeName:label.font} 
               context:context].size; 

Thneはこの高さに基づいて計算を行うことができます。詳細情報については

、コードの下にあなたがこの回答を確認することができますhttps://stackoverflow.com/a/27374760/5660422

+0

しかし、私はまだどこかで動的にフォントサイズを設定する必要があります – Mix

+0

確かに、回答は@Mixを編集しました –

関連する問題