2つのプロトタイプセルでUICollectionViewを使用しています。プロトタイプセルの幅は異なり、コントロール(画像ビューとWebビュー)が異なります。特定のインデックスの正しいプロトタイプセルを必ず返します(すべてのセルに正しいコンテンツが表示されます)が、プロトタイプセルサイズは無視され、代わりにコレクションビューのアイテムサイズが使用されます。サイズを手動で設定しているわけではありません。プロパティが実際に表示されているときに無視される場合、ストーリーボードでプロトタイプセルのサイズを設定できるようにするポイントは何ですか?
ストーリーボードエディタのセルのサイズは、セルの設計を支援するためのものです。各プロトタイプセルは異なるサイズになる可能性があるため、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のデリゲートである必要があります。したがって、次のように、View Controllerの.hファイルにデリゲート宣言を追加することを忘れないでください。
@interface MyViewController () <UICollectionViewDelegateFlowLayout>
スイフト
extension MyViewController : UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 100, height: 100)
}
}
すべてのセルが同じサイズであり、itemSize
にUICollectionViewFlowLayout
を設定できる場合
例:
((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
Swift、最新のiOSに対応。
(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize
Samに返信するのに十分なポイントがありませんが、重要なのは、それがUICollectionViewLayoutではなくUICollectionViewFlowLayoutであるということです。
Swiftでは、sizeForItemAtIndexPathデリゲートメソッドを呼び出して、各セルのサイズを設定できます。
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
if indexPath.row == 0 {
// Set the size for cell no. 0
}else if indexPath.row == 1 {
// Set the size for cell no. 1
}
}
それがお役に立てば幸いです。ありがとう!
UICollectionViewCell
プロパティでUICollectionView
のサイズを設定できます。
ストーリーボードで、Collection View
でDocument Outline
を選択し、Cell Size
でSize Inspector
を編集します。
また、カスタムの場合は、セルのサイズタイプをデフォルトに変更する必要があります。
すべてのセルが同じサイズの場合、UICollectionView
のセルサイズプロパティをUICollectionViewCell
のサイズプロパティと同じに設定するだけです。
デフォルトのデリゲートを使用します。 。 。
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
CGSize mElementSize;
mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
return mElementSize;
}