2017-10-10 16 views
0

iOSのswiftアプリケーションで、水平方向にスクロール可能な親子グリッドレイアウトを作成するカスタムUICollectionViewLayoutを使用してUIColletctionViewControllerを作成しました。このレイアウトの高さは、画面の高さに合わせて計算されます。ナビゲーションバーが追加されたときに縮小コレクションビューが表示される

override var collectionViewContentSize: CGSize { 
    return CGSize(
     width: someWidth, 
     height: collectionView?.frame.height ?? 0 
    ) 
} 

私は、ナビゲーションバー全体のコレクションビューで私のコレクションビューコントローラを埋め込む下に移動しますがcollectionView?.frame.heightは同じままので、私のコンテンツがダウンしてオーバーフローします。私は、ナビゲーションバーなしでこの減少に使用可能なスペースの高さを取得するにはどうすればよい

enter image description here

+0

ビューのフレームが変更されたときにCollectionView Layoutを無効にしてください。 – IlNero

+0

残念ながら、これは役に立ちません。 – Peracek

答えて

0

私は実際に私のために働く非常に簡単な解決策を見つけました。私は私のコレクションビューコントローラの属性インスペクタで "Under Top Bars"オプションのチェックを外しました。

UICollectionViewController

1

あなたのビューコントローラは、あなたのcollectionViewのcontentInsetは、ナビゲーションバーの高さを補うため、そのインセットをチェックするために調整されます(そうであるように見える).allまたは.topautomaticallyAdjustsScrollViewInsets = trueedgesForExtendedLayoutを設定した場合。あなたが行うことができますあなたの場合は

let visibleHeight = collectionView.frame.height - collectionView.contentInset.top 

override var collectionViewContentSize: CGSize { 
    return CGSize(
     width: someWidth, 
     height: collectionView.frame.height - collectionView.contentInset.top 
    ) 
} 

別のオプションは、あなたの、その後edgesForExtendedLayout = UIRectEdge(rawValue: UInt(0))を設定することで、あなたのcollectionViewが(ナビゲーションバーの後ろに開始)を上部可視高さを取得するために拡張すると仮定すると、

ビューコントローラのビューはいずれのエッジにも拡張されず、ナビゲーションバーの下に表示されるため、コレクションビューのフレームは可視範囲内になり、例のようにcollectionViewContentSizeを使用できます。

+0

私の 'collectionView.contentInset.top'はゼロに設定されていますので、動作しません。しかし、 'edgesForExtendedLayout = UIRectEdge(rawValue:UInt(0)) 'を設定したこの2番目の解決策は機能します。ありがとう! – Peracek

+0

それから、あなたが 'viewDidLoad'でまだインセットが調整されていないので、他の解決策のために' viewWillAppear'または 'viewWillLayoutSubviews'の' collectionView.contentInset.top'をチェックすると答えたように確認できます。 –

+0

@Peracek btw –

関連する問題