2016-08-23 8 views
35

これは私を夢中にしています!以下に示すように、私はUICollectionViewControllerを持っている:CollectionView sizeForItemAtIndexPathはまだ呼び出されていません

class PhrasesCompactCollectionViewController: UICollectionViewController 

numberOfSectionsとcellForItemAtが呼び出されているが、sizeForItemAtIndexPathが呼び出されることはありません。私は他のどこかで同じ正確なコードを使用しており、正しく起動します。私はあなたがあなたのクラス宣言におけるプロトコルUICollectionViewDelegateFlowLayoutを実装することを指定する必要がXcodeの8のベータ版6

func collectionView(collectionView: UICollectionView, 
         layout collectionViewLayout: UICollectionViewLayout, 
         sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

     return CGSize(width: 120, height:120) 
    } 

答えて

112

を使用しています。

class PhrasesCompactCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout

+2

ありがとうございます! Xcode 8 Beta 6の異なる署名でした。ありがとう! –

+7

この回答は受け入れる必要があります。 –

+0

偉大な答え、ありがとう! – Rados

9

スウィフト3

UICollectionViewのセルサイズを設定するには、UICollectionViewFlowLayoutのオブジェクトを作成し、カスタマイズする必要があります。プロパティをカスタマイズし、そのレイアウトオブジェクトをUICollectionViewオブジェクトに設定します。

必要に応じてcellheightとcellWidthオブジェクトを変更します(必要なセルの高さと幅)。

override func viewDidLoad() { 
    super.viewDidLoad() 

    let cellWidth : CGFloat = myCollectionView.frame.size.width/4.0 
    let cellheight : CGFloat = myCollectionView.frame.size.height - 2.0 
    let cellSize = CGSize(width: cellWidth , height:cellheight) 

    let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .vertical //.horizontal 
    layout.itemSize = cellSize 
    layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) 
    layout.minimumLineSpacing = 1.0 
    layout.minimumInteritemSpacing = 1.0 
    myCollectionView.setCollectionViewLayout(layout, animated: true) 

    myCollectionView.reloadData() 
} 

しているかを確認して:あなたはsizeForItemAt indexPathメソッドを追加した場合、メソッドを削除する必要があります...

をメソッド

スウィフト3+
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 

} 
+3

これはどのように役立ちますか? – almas

+0

Almas、これはUICollectionViewCellのカスタムセルサイズを設定するのに役立ちます...独自の値を定義できるという点で変数cellWidthとcellHeightがあります。 「layout.sectionInset」、「layout.minimumLineSpacing」、「layout.minimumInteritemSpacing」の他に、これらの変数はUICollectionViewCellサイズでも重要です。 –

+0

答えに説明を追加してください。 – Darshana

11

を削除しますこの方法を使用してください:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    return CGSize(width:(collectionView.frame.height-90)/2, height: 100) 
} 

メソッドが宣言されなければならない、あなたのクラスは(スウィフト3.1に)私にとっては、両方

  • UICollectionViewDelegate

  • UICollectionViewDelegateFlowLayout

+1

UICollectionViewControllerが既に行っているように 'UICollectionViewDelegate'に準拠することは冗長です。 –

+0

@VanDuTran UICollectionViewControllerが必須ではないため、必須であることを述べるのは冗長ではありません... –

-4

に準拠していることを確認してくださいこのような公開:

public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return CGSize() 
    } 

公開を忘れないでください。

関連する問題