2016-11-07 8 views
0

私はUICollectionViewとそのセルをプログラムで作成しています。私のカスタムUICollectionViewでは実装されている唯一のメソッドはlayoutSubviewsです。私のコレクションビューを設定し、委任を処理するためのコードは以下の通りです。 GIFから一度見るとわかるように、セルは正しく読み込まれますが、大部分は整列していないか、スクリーンから外れています。私はそれが再利用される方法に何か間違っていると思う。私は通常、テーブルビューとスクロールビューを使用しているので、コレクションビューに慣れていません。これをどうすれば解決できますか?プログラムで作成したUICollectionViewを使用すると奇妙な図が表示される

enter image description here

let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .horizontal 
    layout.minimumInteritemSpacing = 0 
    layout.minimumLineSpacing = 0 
    layout.itemSize = CGSize(width: 160, height: 200) 
    featuredCollectionView = UICollectionView(frame: frame), collectionViewLayout: layout) 

featuredCollectionView.delegate = self 
    featuredCollectionView.dataSource = self 
    featuredCollectionView.register(ItemCollectionViewCell.self, forCellWithReuseIdentifier: 
    "cell") 

// MARK: CollectionView Delegate 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat 
{ 
    return 8 
} 

func numberOfSections(in collectionView: UICollectionView) -> Int 
{ 
    return 1 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
{ 
    return CGSize(width: 160, height: featuredCollectionView.frame.size.height) 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
{ 
    return featuredItems.count 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
{ 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ItemCollectionViewCell 
    cell.item = featuredItems[indexPath.row] 

    return cell 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 
{ 
    return UIEdgeInsetsMake(0, 0, 0, 0) 
} 
+1

あなたFUNCのcollectionViewに高さを確認し(_ collectionView:UICollectionView、レイアウトcollectionViewLayout:UICollectionViewLayout、sizeForItemAt indexPath:IndexPath) - > CGSize {リターンCGSize(幅:160、高さ:featuredCollectionView.frame.size.height) } ....時にはタイミングの問題がある...コレクションビューに予期しない高さがある可能性がある – Raegtime

+0

高さの変更が機能しない –

+0

@ Big_Mac_24あなたが使用しているセルをgithubプロジェクトに投稿できますか? –

答えて

1

あなたはコレクションビュー内の細胞の起源に基づいて、それを設定している、backgroundCardViewのフレームをチェックし、あなたの主な問題を参照してください。

backgroundCardView.frame = CGRect(x: self.frame.origin.x + 8, y: self.frame.origin.x + 8, width: self.frame.size.width - 16, height: self.frame.size.height - 16)

これは間違ってレイアウトしているように見える理由である、セルの境界外の方法になるだろう。また、サブビューをセルのcontentViewに直接追加する必要はありません。他のコメントに記載されているように、layoutSubviewsにビューを追加しないでください。より良い場所はinitメソッドの中にあります。

関連する問題