22

UICollectionView縦スクロールで作ってみました。

セルの幅が画面の幅を超えているため、正しい計算されたコンテンツ サイズを返すレイアウトにcustomFlowLayout基づいて作成しました。UICollectionViewFlow

ただし、これは機能しません。セルの幅が画面の幅よりも小さい場合に機能します。縦スクロールでは画面幅以上の幅は持てないということですか?

水平スクロールも同じですが、の高さはCollectionView画面の高さに制限されます。

それを機能させる方法はありますか?

4

5 に答える 5

15

他の人がすでに言ったように、 はUICollectionViewフロー レイアウトを使用して一方向にしかスクロールできません。ただし、カスタム レイアウトを作成したり、サード パーティのライブラリを使用したりしなくても、これは非常に簡単に実現できます。

ビューをストーリー ボードにレイアウトするときは、UICollectionView埋め込みをUIScrollView. scrollview を水平方向にスクロールするように設定し、UICollectionViewを垂直方向にスクロールするように設定します。次に、UICollectionView.delaysContentTouchesを true に設定して、タッチが に渡されUIScrollView、コレクションビューをスクロールしようとしているとは思われないようにします。

を設定するときはUICollectionView、そのサイズとセルのサイズを実際に希望するサイズ (実際の画面よりも広い) に設定し、それに応じて配置します。

今、UIViewControllerこのコードをビューのライフサイクルに入れます

    - (void)viewDidLayoutSubviews {
        self.myScrollView.contentSize = self.myCollectionView.frame.size;
    }

あなたが説明していることを達成するためにあなたがしなければならないのは文字通りそれだけです。これで、スクロールビューで水平方向にスクロールしてセル全体を表示できるようになり、collectionView でセルを垂直方向にスクロールできるようになります。

楽しいプログラミング。

于 2013-12-16T23:28:13.423 に答える
0

あなたの問題を理解できたかどうかわかりません。

ただし、カスタム レイアウトを作成した場合は、実装済みであることを確認してください。

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath;

また、レイアウト属性のフレームとサイズが、「大きなセル」インデックス パスの正しい値で設定されていることを確認してください。

また、実装していることを確認してください:

- (CGSize) collectionViewContentSize;

このメソッドは、コレクション ビューの contentSize を返します。contentSize.width > youAppFrame.width の場合、水平スクロールが必要です。高さと垂直スクロールについても同じです。

また、collectionView でスクロールが許可されていることと、以下を使用してレイアウトが正しく準備されていることを確認してください。

- (void)prepareLayout

ところで、あなたのレイアウトではオーバーロードしていますUICollectionViewLayoutUICollectionViewFlowLayout

于 2012-12-21T12:10:57.040 に答える