縦スクロールでUICollectionView
を作りました。
セルの幅は画面の幅よりも大きいため、customFlowLayout
レイアウトに基づいてUICollectionViewFlow
を作成し、適切に計算されたコンテンツサイズを返しました。
ただし、これは機能しません。セルの幅が画面の幅よりも小さい場合に機能します。垂直スクロールでは、画面の幅を超える幅を設定できないということですか?
横スクロールでも同じですが、CollectionView
の高さは画面の高さに制限されます。
それを機能させる方法はありますか?
他の人がすでに述べたように、UICollectionView
はフローレイアウトを使用して一方向にしかスクロールできません。ただし、カスタムレイアウトを作成したり、サードパーティのライブラリを使用したりせずに、これを非常に簡単に行うことができます。
ビューをストーリーボードに配置する場合、UICollectionView
をUIScrollView
に埋め込むことができます。 scrollviewを水平にスクロールするように設定し、UICollectionView
を垂直にスクロールするように設定します。次に、UICollectionView.delaysContentTouches
to trueなので、タッチはUIScrollView
に渡され、コレクションビューをスクロールしようとしているとは思われません。
UICollectionView
を設定するときは、そのサイズとセルのサイズを実際に必要なサイズ(実際の画面よりも広い)に設定し、それに応じてレイアウトします。
今度は、包含UIViewController
に、このコードをビューのライフサイクルに入れます。
- (void)viewDidLayoutSubviews {
self.myScrollView.contentSize = self.myCollectionView.frame.size;
}
文字通り、あなたが説明していることを達成するためにあなたがしなければならないすべてです。これで、scrollviewを使用して水平方向にスクロールしてセル全体を表示でき、collectionViewはセル全体を垂直方向にスクロールできるようになります。
ハッピープログラミング。
私はこれを見つけました ICollectionView:水平および垂直スクロールをサポートするUICollectionViewLayoutを定義する方法?
jiruneによって提供された例が重要なようです。しかし、行のセクションの代わりにcollectionview行を使用することが可能であれば、それはいいでしょう。
私はあなたの問題を理解したかわかりません。
ただし、カスタムレイアウトを作成した場合は、実装済みであることを確認してください。
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;
また、レイアウト属性のフレームとサイズには、「ラージセル」インデックスパスの正しい値が設定されています。
また、実装したことを確認してください:
- (CGSize) collectionViewContentSize;
このメソッドは、コレクションビューのcontentSizeを返します。 contentSize.width> youAppFrame.widthの場合、水平スクロールが必要です。高さと垂直スクロールについても同じです。
また、collectionViewがスクロールを許可し、レイアウトが以下を使用して正しく準備されていることを確認してください。
- (void)prepareLayout
ところで、あなたのレイアウトではUICollectionViewLayout
またはUICollectionViewFlowLayout
をオーバーロードしていますか?
その前に、異なるタイプのレイアウトを使用する必要があります。フローレイアウトは、その項目をリストとして表し、使用可能な幅に基づいてこれらの項目をセルに広げます。水平スクロールと垂直スクロールの両方が必要な場合は、グリッドの列数を何らかの方法で指定する必要があります。 FlowLayoutにはそれがありません。簡単な解決策は、UICollectionViewLayoutのサブクラスを作成し、collectionViewContentSizeをオーバーライドして、width = 1行のセル幅の追加された合計に追加することです(これは、必要な列の数を知る必要がある場所です)。それら。セルがグリッドと同じように列ごとに同じサイズである場合、これは正常に機能します。