64

2 つのプロトタイプ セルを持つ UICollectionView を使用しています。プロトタイプ セルは幅が異なり、含まれるコントロールも異なります (画像ビューと Web ビュー)。特定のインデックスに対して正しいプロトタイプ セルを確実に返します (すべてのセルが正しいコンテンツを表示します) が、プロトタイプ セル サイズは無視され、代わりにコレクション ビューのアイテム サイズが使用されます。手動でサイズを設定しているわけではありません。実際に表示されるときにプロパティが無視される場合、ストーリーボードでプロトタイプ セルのサイズを変更できるようにするポイントは何ですか?

4

9 に答える 9

174

ストーリーボード エディターのセルのサイズは、セルの設計を支援するためのものです。各プロトタイプ セルは異なるサイズになる可能性があるため、UICollectionView はすべてのセルに対してどのセルのサイズを選択すればよいかわかりません。そのため、セルに使用する実際のサイズを個別に設定します。デザイナーでコレクション ビューを選択し、[コレクション ビューのサイズ] 見出しの下の [サイズ] インスペクターでセル サイズの幅と高さを設定することで、これを行うことができます。

または、次のメソッドをオーバーライドして、各セルに使用するサイズを指定する CGSize オブジェクトを返すこともできます。この方法を使用すると、実際に各セルを異なるサイズにすることができます。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

例:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(100, 100);
}

このメソッドを呼び出すには、View Controller が UICollectionViewDelegateFlowLayout のデリゲートである必要があります。したがって、そのデリゲート宣言をビュー コントローラーの .h ファイルに次のように追加することを忘れないでください。

@interface MyViewController () <UICollectionViewDelegateFlowLayout>

迅速

extension MyViewController : UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
}
于 2013-01-29T15:44:54.847 に答える
6

同様の問題がありました。sizeForItemAt にブレークポイントを設定し、コレクションにあるすべてのセルに対して呼び出されていましたが、コードで設定されたサイズがデバイスに反映されませんでした。

私のプロジェクトの他のコレクションを見ていると、コレクション ビューのフロー レイアウトが問題のあるコレクションでわずかに異なっていることに気付きました。

ストーリーボードでフロー レイアウトを選択することによって

そして、サイズインスペクターでセルサイズ推定サイズを設定します

これは私の問題を解決するのに役立ちました。

ただし、セルのサイズは sizeForItemAt にあるものでは動的ではありません

于 2019-10-22T16:21:21.463 に答える
1

プロパティでサイズを設定できUICollectionViewCellますUICollectionView

ストーリーボードで、 を選択Collection Viewし、Document Outlineで編集Cell SizeしますSize Inspector

カスタムの場合は、セルのサイズ タイプをデフォルトに変更する必要があります。

于 2015-01-19T13:23:38.027 に答える
1

UICollectionViewDelegateFlowLayout メソッドを使用してみてください。Xcode 11 以降では、Storyboard から Estimate Size を none に設定する必要があります。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: 
UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
      let padding: CGFloat =  170
      let collectionViewSize = advertCollectionView.frame.size.width - padding
      return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)
}
于 2020-03-12T13:23:21.590 に答える
0

すべてのセルが同じサイズの場合は、UICollectionViewのセル サイズ プロパティを のサイズ プロパティと同じに設定するだけUICollectionViewCellです。

于 2014-04-24T10:06:16.067 に答える