4

私は、3つのUICollectionViewsを含むスタックビューを持っています。そのスタックビューはディスプレイの半分の高さに設定されているため、より大きなデバイスでより多くのスペースを使用します。これはInterface Builderで設定されています。実行時にUICollectionViewCellSizeを設定する

私たちが実行するまでは、実際のセルのサイズはわからないので、実行時にUICollectionViewのセルサイズを設定する必要があります。私はそれらを正方形にしたいので、ちょうどUICollectionViewの高さを考慮して、上部と下部のインセットを減算して、結果のサイズにitemSizeを設定します。

viewDidLayoutSubviewsでこれを実行しようとしています。コレクションビューの最初の高さが設定されていることがわかります。しかし、それらは1000x1000に設定されているように見えます(ストーリーボードではもっと合理的なサイズですが)ので、コレクションビューの高さ1000に基づいてセルサイズを計算します。これは大きすぎますが、私はもう一度呼び出され、もう一度それを再計算するチャンスがあります。 UICollectionViewitemSizeが正しくないことを大声で文句を言う前に、私はやるではなく、(今「正しい」のサイズを持っているcollectionView、中に収まるには大きすぎる。すなわち。)

動作Iを取得するための最良の方法は何ですかUICollectionViewからの警告なしで探していますか? UICollectionViewの最終的なサイズに基づいて、実行時にコレクションビューアイテムのサイズを設定することは、私が過去に苦労していたものであり、itemSizeを設定するための「正しい」時間ではないようです。プログラムの寿命中に変化するものではないからといって、それを動的に返すのは嫌です。最初にビューをレイアウトするときに発生する矛盾があるようです。

コレクションビューには1000.0で1000.0の初期サイズが付属していますが、それをどうやって修正するのかはわかりません。おそらくスタックビューに埋め込まれていることと関係しています?

編集の追加:ほとんどの場合、レイアウトの問題を引き起こすのはUIStackViewです。私は、UIStackViewに埋め込まれたトップレベルビューのときにUICollectionViewのサイズをテストするためのダミープロジェクトを作成しました。埋め込まれていない場合、viewDidLayoutSubviewsが呼び出されると、superviewの境界に合うように適切なサイズになりました。ただし、UIStackViewの内部にある場合、デフォルトサイズは1000x1000のままです。

今のところ、私はviewDidLayoutSubviewsに次のコードを追加することでこの問題を回避働いています:

collectionViewUIStackViewview内にある
if collectionView.bounds.size.width > view.bounds.size.width { 
     view.layoutIfNeeded() 
    } 

UIViewControllerのメインビューです。これにより、後でビューのサイズに基づいた計算がすべて正しく行われ、UIStackViewの動作が修正された場合にはうまくいきません。

同様の説明herehere。興味深いことに、XCode8では、新しいデフォルトではXIBファイルのビューサイズが保存されず、最初のレイアウトパスで解決されるように初期サイズ1000x1000のものがすべて含まれています。 UIStackViewを除いて、私は推測する。

答えて

0

sizeForItemAtIndexPath()返信itemSizeですか?私はその機能を実装することが実行時に動的にUICollectionViewCellをサイズ調整する唯一の信頼できる方法であることを発見しました。

関連する問題