2016-06-01 33 views
0

私はいくつかのマルチラインラベルを持つUICollectionViewCellを持っています。セルはペン先の内側に定義されています。私は(UITableViewのような)互いの下にあるセルを、左右に余白を付けてレイアウトしたいと思います。collectionViewCellの高さを動的な高さで計算する

enter image description here

セルの高さを計算するために、私はsizeForItemAtIndexPathで以下の手順を実行します。

  1. プロトタイプセルをインスタンス化し所望の幅(と、一時的な幅の制約を作成し、追加しますコレクションビューの幅から左右のパディングを除いたもの)
  2. 将来のコンテンツでセルを設定する
  3. コールsyste必要な高さを得るにはmLayoutSizeFittingSize(UILayoutFittingCompressedSize)

高さの計算は常に少しオフになっているようです。さらに検査した後(systemLayoutSizeFittingSizeの前にlayoutIfNeededを呼び出す)、セルには既に幅制約があり、これはIBでレイアウトされた幅に設定されているようです。

(
    "<NSAutoresizingMaskLayoutConstraint:0x7f91baf48be0 h=--& v=--& H:[UIView:0x7f91bacb7440(304)]>", 
    "<NSLayoutConstraint:0x7f91bacb7f00 H:[UIView:0x7f91bacb7d90(359)]>", 
    "<NSLayoutConstraint:0x7f91ba970730 H:[UIView:0x7f91bacb7d90]-(0)-| (Names: '|':UIView:0x7f91bacb7440)>", 
    "<NSLayoutConstraint:0x7f91ba970780 H:|-(0)-[UIView:0x7f91bacb7d90] (Names: '|':UIView:0x7f91bacb7440)>" 
) 

セルはデザイン時に304ptの幅でレイアウトされます。この場合、セルの所望の幅は359ptである。

enter image description here

誰もが、それは何らかの形でIBによる幅の制約の暗黙の作成を無効にすることは可能ですか知っていますか?または、柔軟な高さを実現するためのよりよい方法がありますか?&右マージンのレイアウトを固定しましたか?

この記事では、デフォルトのコレクションビュー(10×10)のサイズを維持するために提案し、それは非常にシンプルなUIと連携し、ちょっと議論の余地のデザインを参照するためのインタフェースビルダを使用して行います:

http://corsarus.com/2015/collection-view-with-self-sizing-cells/

答えて

1

セル内の各ラベル(垂直)にContent Hugging PriorityとContent Compression Resistanceプライオリティを設定するか、一部のラベルで高さの制約を宣言する必要があります

+0

すべてのラベルで垂直方向と水平方向 – liliqui

関連する問題