collectionView中的约束

时间:2016-10-21 13:25:59

标签: ios swift uicollectionviewcell

我想在我的collectionView单元格中拥有动态宽度和高度,所以每个屏幕只有2个单元格。从顶部,左侧,右侧和它们之间10px。

示例:

如果我有320px的宽度(屏幕)我想要每个单元格145px,所以它会 左起10px +145(单元格)+ 10px + 145(第二单元格)+ 10px右起。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用stackviews,也可以设置单元格的宽度约束并将其拖动到代码中,将常量设置为半屏尺寸。

当你有:

时,为什么你直接在单元格上使用约束?
func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
{
    return CGSizeMake(width ,height);
}

答案 2 :(得分:0)

使用以下代码:

func collectionView(collectionView:UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) - > CGSize {         let width =(screenSize.width - 30)/ 2         let height = width * aspectRatio // aspectRatio - someValue或将height作为常量         返回CGSizeMake(宽度,高度)     }

这对我有用..