2017-04-23 7 views
0

偶数行が奇数行よりも大きい2列の表を作成しようとしています。 これは私が現在持っているものです。スウィフトUICollectionセルは、他のすべての行の高さを設定します。

import UIKit 

class FBSCollectionViewCell: UICollectionViewCell { 


    @IBOutlet weak var cellText: UILabel! 

} 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    let identifier = "customCell" 
    @IBOutlet weak var collectionView: UICollectionView! 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
     layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0) 
     layout.itemSize = CGSize(width: 333, height: 50) 
     layout.minimumInteritemSpacing = 0 
     layout.minimumLineSpacing = 0 
     collectionView!.collectionViewLayout = layout 
    } 

    let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard 
    var items = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"] 


    // MARK: - UICollectionViewDataSource protocol 

    // tell the collection view how many cells to make 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return self.items.count 
    } 

    // make a cell for each cell index path 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     // get a reference to our storyboard cell 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath as IndexPath) as! FBSCollectionViewCell 

     cell.cellText.text = self.items[indexPath.item] 

     if (indexPath.item % 4 < 2){ //title cells 
      cell.backgroundColor = UIColor(red: 95/255, green: 176/255, blue: 223/255, alpha: 1) 
      cell.cellText.textColor = UIColor.white 
      cell.frame.size.height = 50.0 
      //cell.frame.size.width = 333.0 
     }else{ 
      cell.backgroundColor = UIColor(red: 236/255, green: 236/255, blue: 236/255, alpha: 1) 
      cell.cellText.textColor = UIColor(red: 178/255, green: 178/255, blue: 178/255, alpha: 1) 

      print("in the even rows \(indexPath.row)") 
      cell.frame.size.height = 200.0 
      //cell.frame.size.width = 333.0 
     } 
     return cell 
    } 


} 

何らかの理由で、フォーマットが最後の行でのみ機能するようです。 enter image description here

この行がサイズを上書きしている可能性があると思っていました。

layout.itemSize = CGSize(width: 333, height: 50) 

だから私はアウトその行をコメントし、お互いにぶつかるの細胞を作っ

cell.frame.size.width = 333.0 

を追加しました。

enter image description here

私は、このような

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    if (indexPath.row % 4 < 2) { 
     return CGSize(width: 333, height: 50.0) 
    } else { 
     return CGSize(width: 333, height: 100.0) 
    } 

} 

とlayoutIfNeededとしてサイズを変更する他の方法を試してみましたが、何も働いていません。 誰かが間違っていることを指摘できますか?ありがとう。

答えて

1

でそれをやってはUICollectionViewDelegateFlowLayout

extension ViewController: UICollectionViewDelegateFlowLayout { 

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


     if (indexPath.item % 4 < 2){ //title cells 
      return CGSize(width: self.view.frame.width/2, height: 100) 
     }else{ 
      return CGSize(width: self.view.frame.width/2, height: 200) 

      print("in the even rows \(indexPath.row)") 
     } 
    } 

} 
の方法 sizeForItemAtを実装するよりも、そこにセルの高さを設定することをお勧め
-1

CollectionView FlowLayoutDelegateは 'sizeForItemAtIndexPath' を提供し、私はあなたがcellForItemAtIndexPath

関連する問題