web-dev-qa-db-ja.com

iOS UICollectionViewプロトタイプセルサイズプロパティは無視されます

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

62
minerat

ストーリーボードエディタのセルのサイズは、セルの設計を支援するためのものです。各プロトタイプセルは異なるサイズになる可能性があるため、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)
    }
}
171

すべてのセルが同じサイズであり、itemSizeUICollectionViewFlowLayoutを設定できる場合

例:

((UICollectionViewFlowLayout *) self.collectionViewLayout).itemSize = CGSizeMake(100, 100);
19
Sam

Swift、最新のiOSに対応。

(collectionView.collectionViewLayout as! UICollectionViewFlowLayout).itemSize = cellSize

Samに返信するのに十分なポイントがありませんが、重要なのは、それがUICollectionViewLayoutではなくUICollectionViewFlowLayoutであるということです。

7
mxwt

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
        }
    }

それがお役に立てば幸いです。ありがとう!

1
S E

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

ストーリーボードで、Collection ViewDocument Outlineを選択し、Cell SizeSize Inspectorを編集します。

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

1
Wanbok Choi

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

0
theDuncs

デフォルトのデリゲートを使用します。 。 。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize mElementSize;
    mElementSize = CGSizeMake(SCREEN_WIDTH , SCREEN_HEIGHT *0.60);
    return mElementSize;
}   
0
Naman Vaishnav