2017-11-27 4 views
0

私はUICollectionViewCellのサブクラスを実装しようとしています。サブビュープロパティを変更する代わりに、UICollectionView内のサブビューを置き換えます。

私はカスタムビューの配列を取得していますが、viewsという配列を使用して、あるオブジェクトから別のオブジェクトにviewsを渡します。それらはタイプCustomViewです。

UICollectionViewCellサブクラスにはviewというタイプのCustomViewという1つのプロパティがあります。 CellForItemAt...

、私はこのようなCustomViewsの配列からセルのviewプロパティを設定しようとしている:

let customView = array[indexPath.row] 
cell.view = customView 

私はこれを行う際しかし、細胞が正しく表示されません。それらは空で、画面上には灰色の形があります。

しかし、セルのCustomViewサブビューのプロパティを明示的に設定すると、どのようにしたいのかがわかります。

セルにレイアウトパスを行う方法はありますか?または、あらかじめ設定されたビューを渡すのではなく、UICollectionViewCellsでプロパティを明示的に設定するだけですか?

コードは独自のものですので、私は不可解でなければならないが、私は

編集を明確にすることができますなら、私に知らせてください。詳しい説明のために受け入れ答えのコメントを参照してくださいしてください

+0

cell.viewを設定したら、customViewをcell.contentViewのサブビューとして追加しますか? – Ryan

+0

customCellのinitでは、customViewをサブビューとして追加し、すべての側でcontentViewを満たすように制約します。 – ArielSD

+1

しかし、セルの初期化の後、 'cell.view = customView'です。初期化のcell.viewと 'cell.view = customView'の後のcell.viewは異なります。新しいビューをサブビューとして追加し、自動レイアウト制約をリセットする必要があります。 – Ryan

答えて

0

制約を追加する必要があります。そうしないと、デフォルトの自動サイズ変更マスク制約が取得されます。 cell.setNeedsLayout()に電話すると、自動レイアウトを強制的に再計算してから、ボウをおろしてから次のドローを実行します。

+0

偉大な呼び出し - 私はそれを言及すべきでした。 customCellのinitでは、customViewをサブビューとして追加し、すべての側でcontentViewを満たすように制約します。 CellForItemAtIndexPathでは...私は新しいカスタムビューをサブビューとして追加したり、制約を追加したりしていません。多分それは問題ですか? – ArielSD

+1

はい、問題です。実際にそれをcontentViewのサブビューとして追加する必要があります。コードをそのまま使用して、didSetを追加すると、スーパービューからoldValueを削除し、newValueをサブビューとして追加し、制約を追加できます。 –

関連する問題