2016-10-21 53 views
0

我想在我的collectionView單元中有動態寬度和高度,所以我在每個屏幕上只有2個單元格。從頂部,左側,右側和它們之間10px。collection中的約束條件查看

實施例:

如果我有320像素寬(屏幕)希望每個細胞145px所以這將是 10px的從左145(小區)+ 10px的145之間+(第二小區)+ 10px的右。

回答

2

順應你的控制器UICollectionViewDelegateFlowLayout協議和實現方法:

import UIKit 

class ViewController: UIViewController 
{ 
    let numberOfCells = 9 
    let kCellHeight : CGFloat = 100 
    let kLineSpacing : CGFloat = 10 
    let kInset : CGFloat = 10 

    @IBOutlet weak var collectionView: UICollectionView! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 
    } 
} 

extension ViewController : UICollectionViewDataSource 
{ 
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return numberOfCells 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "sampleCell", for: indexPath) 
     return cell 
    } 
} 

extension ViewController : UICollectionViewDelegateFlowLayout 
{ 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    { 
     return CGSize(width: (UIScreen.main.bounds.width - 2*kInset - kLineSpacing)/2, height: kCellHeight) 
    } 

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

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 
    { 
     return UIEdgeInsets(top: kInset, left: kInset, bottom: kInset, right: kInset) 
    } 
} 

這裏是附截圖:

enter image description here

+0

感謝您的回答。這實際上改變了我的佈局,但你可以更新垂直的代碼? –

+0

但您所指定的規格是根據水平佈局。即單元寬度。根據垂直佈局告訴你的規格。 – PGDev

+0

我不明白你..我想在每個屏幕上2個單元格,然後再下2個單元格,等等.. –

1

您既可以使用堆棧視圖,也可以設置單元格的寬度約束,並將其拖入代碼以將常量設置爲屏幕大小的一半。

也是爲什麼你要直接使用的細胞的限制,當你有:

func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize 
{ 
    return CGSizeMake(width ,height); 
} 
+0

如何我可以使用堆棧查看單元格嗎?或寬度約束(所有這些都無法使用它們)。 這個函數返回一個錯誤'CGSizeMake'在Swift中不可用(我使用swift 3) –

+0

那麼單個單元格上的堆棧視圖將它分成相等的視圖...例如。如果你有一個具有屏幕寬度的單元格,你可以在它的內容中使用堆棧視圖來分割它。但並非如此。代碼是用Objective-C編寫的。快速版本是CGSize(寬度:X,高度:Y) –

0

使用下面的代碼:

FUNC的CollectionView(的CollectionView:UICollectionView,佈局collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath ) - > CGSize {width =(screenSize.width - 30)/ 2 let height = width * aspectRatio // aspectRatio - someValue或將高度設爲常量 return CGSizeMake(width,height) }

這個工作很適合我..