UITableViewCellsに自動レイアウトを使用したい。これらの表のセルには、動的な高さがあります(テキストの長さに依存します)。
[UIView -systemLayoutSizeFittingSize:]
を使用して適切なセルの高さを計算しています([UITableView -heightForRowAtIndexPath:]
で返す)が、次の結果が得られます。
UILayoutFittingCompressedSize
を渡した場合、CGSizeは(0,0)になります。
UILayoutFittingExpandedSize
を渡すと、次のエラーでアプリがクラッシュします。
***-[NSISLinearExpression incrementConstant:]、/ SourceCache/Foundation_Sim/Foundation-1043.1/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m:620のアサーションエラー
(私の推測では、これはある数が無限であることを意味します。)
私の実装は簡単です。各オブジェクトの高さを計算し、それをキャッシュします。
MessageCell *cell = // allocate a new cell...
// set up the cell (assign text, images, etc)
CGSize size = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
self.cellHeight = size.height; // size always equals (0, 0)
これは私が設定した制約の問題であると仮定しますが、
cellHeight
を手動で大きな値に設定すると、高さが正しくないことを除いて、セルはすべて正常に見えます。[cell hasAmbiguousLayout]
はNO
を返します。何か案は?
これは私にとってうまくいくものです(「contentView」に注意してください)
CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
編集:私は同様の質問に答え、ここに完全な例を提供しました:
あなたが使用する制約を投稿しなかったので、投稿に基づいて具体的なことを言うのは難しいです。 Appleドキュメント:
systemLayoutSizeFittingSize:
保持する制約を満たすビューのサイズを返します。
セルのサイズが(0,0)に等しいと解釈できる制約を作成した可能性があります。
テキストでセルの高さを確認できる別の方法があります。あなたはあなたのテキストをUITextViewに入れてから:
UITextView textView;
textView.text = @"l";
textView.font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE];
//some code here
//
CGFloat cellHeight = textView.contentSize.height;
ContentSizeプロパティを使用する前に、UITextViewのテキストとフォント(およびUITextViewの高さを変更する可能性のあるその他すべてのプロパティ)を設定することが重要です。また、最初にUITextViewをビューに追加する必要があります。
////// EDIT
制約を使用するアプローチの問題は、ISNがビューに追加していないセルを測定して、システムに必要なすべての情報がないことです。セルの周囲の領域がわからないため、スペースなどのスペースがどれくらいかわからない