横のスタックビューに2つのラベルがあります。ラベルはnumberOfLines
が0に設定されているため、無限に折り返されます。垂直コンテンツ圧縮抵抗は1000に設定されているため、常にフルハイトになります。水平圧縮抵抗は250に設定されています。コンテンツハギングが設定されます。 〜1000(両方の軸、私はいつもフレームにラベルを抱かせたいからです)。参照:自己サイジングセルに比例配分されたUIStackView
そして、そのスタックビューは、自己サイジングセル内の唯一の項目です。これは、上端、下端、前端、後端に制限されています。スタックビューには、ラベルと同じ圧縮抵抗/コンテンツの抱き合わせがあります。
実行時に、cellForRowAt indexPath関数で、2つのラベルをさまざまな長さのテキストに設定します。私はレイアウトが問題となる可能性があること他の場所で読んだので、私もやる:私が実行したときに
cell.contentView.setNeedsLayout()
cell.contentView.layoutIfNeeded()
しかし、私は最初にいくつかの奇妙な行動を参照してください。しかし、私が周りをスクロールすると、物事は大丈夫に見えるようになります。問題は細胞の再利用と関係しているようですが、何が間違っているのか分かりません。初期ロード - 左側に
。値ラベルは完全に切断されており、2番目のセルでは、比例スペーシングはまったく機能していないようです。値ラベルは名前ラベルと比較すると非常に狭いです。
テーブルの一番上にスクロールして一番上に戻ったところで、これはまさに私が期待していることです。ラベルは、その本質的なコンテンツサイズに基づいて比例して配置されます。しかし、どうやってスクロールしなくてもこの動作を得ることができますか?
ラベルの幅をどのように計算すると思いますか?上の例では、右のラベルは非常に狭い(単語「いいえ」の幅)ため...下の例では、右のラベルは50%より広いです... – DonMag
@DonMag - Appleのスタックビューのドキュメンテーション、fillProportionallyの配布プロパティを選択すると、ビューはスタックビューの軸に沿った固有のコンテンツサイズに基づいて比例してサイズ変更されます。 私は、ラベルの本質的なコンテンツサイズに基づいて幅を計算することを期待しています。これは、セルが再利用されたときに正常に動作するように見えますが、初めてセルがロードされたときには動作しません。 –
確かに...、本質的な内容のサイズは何ですか?単一ラベルの場合、デフォルトフォント17、 "Fruitcake"テキストの*本来の内容サイズ*はそれ自体では '528 x 20.5'です...ラベルの制約を設定するか、または幅の制約があるスタックビューに埋め込むことで幅を制限すると、必要に応じて複数の行に折り返され、* intrinsic height *が変更されます... 2つのラベルがある場合、どれが本質的な高さですか? – DonMag