在UICollectionView中创建一个2 x 2水平网格?

时间:2016-08-08 05:47:41

标签: ios swift uicollectionview xcode7

我有一个拥有UICollectionViewController的Popover。我尝试制作一个2 x 2网格,但它只显示一行。我想要两排。

我试图将UICollectionView帧除以行数,但它仍显示一行。

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let itemWidth = CGRectGetWidth(collectionView.frame)
    let itemHeight = CGRectGetHeight(collectionView.frame)
    let squareSizeHeight = itemHeight / 2
    let squareSizeWidth = itemWidth / 2
    return CGSizeMake(squareSizeWidth, squareSizeHeight)
}

(注意:我故意将弹出窗口设置得非常大)

enter image description here

3 个答案:

答案 0 :(得分:1)

他需要将 Min Spacing Section inset 值设置为零

enter image description here

如果您想显示两个单元格之间的间距,请使用以下公式

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    let itemWidth = CGRectGetWidth(collectionView.frame) - spacingValue
    let itemHeight = CGRectGetHeight(collectionView.frame)  - spacingValue
    let squareSizeHeight = itemHeight / 2
    let squareSizeWidth = itemWidth / 2
    return CGSizeMake(squareSizeWidth, squareSizeHeight)
}

答案 1 :(得分:0)

尝试所有scrren大小的代码:

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

        let screenSize:CGRect = UIScreen.mainScreen().bounds
        let screenWidth = screenSize.width

        return CGSize(width: (screenWidth/2) - 15, height: (screenWidth/2) - 15);
    }

答案 2 :(得分:0)

我知道了!

好的,原来我的收藏视图尺寸是300 x 300(横向)。

我这样做了:

class PhoneViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
let cellId = "cellId"
override func viewDidLoad() {
    super.viewDidLoad()
    //collectionView?.frame = CGRectMake(0, 46, 300, 300) // A no-no here
    navigationItem.title = "Recipients"
    collectionView?.registerClass(UserContactCells.self, forCellWithReuseIdentifier: cellId)
    collectionView?.backgroundColor = UIColor.redColor()
    collectionView?.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    print(collectionView?.frame)

我将集合视图框架大小更改为300乘300(原始为768乘1024)。这不会起作用,因为如果我将弹出窗口视图更改回preferredContentSize = CGSizeMake(300, 300),则集合视图将无法显示。

这是我在collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath)

中所做的事情
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
    var cvSize = collectionView.frame.size
    cvSize = CGSizeMake(300, 300)
    let itemWidth = cvSize.width - 1
    let itemHeight = cvSize.height - 1
    let squareSizeHeight = itemHeight / 2
    let squareSizeWidth = itemWidth / 2
    return CGSizeMake(squareSizeWidth, squareSizeHeight)
}

我将UICollectionView的大小保存在变量中,然后将width和height设置为300,与我的popover的preferredContentSize相同。这是我想要的结果:

enter image description here

它是一个横向滚动的网格:)