使用情节提要在 CollectionView 中仅显示两列,多行 [英] Display just two columns, with multiple rows in a CollectionView using storyboard

查看:48
本文介绍了使用情节提要在 CollectionView 中仅显示两列,多行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只想连续显示两个单元格,不管 iPhone 的屏幕尺寸是多少.喜欢,

I want to display only two cells in a row, no matter what the iPhone screen size is. Like,

我的故事板包含一个 UICollectionView,由约束连接.

My storyboard contains a UICollectionView,connected by constraints.

UICollectionView 的情节提要设置是,

现在,当我在 6、5 秒或更短的时间内运行它时,只有一个单元格出现在一行中.我使用的代码是,

Now, when I run this in 6, 5s or below, only one cell appears in a row. The code I'd used is,

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return [categoryImages count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    homePageCells *cell = (homePageCells *)[collectionView dequeueReusableCellWithReuseIdentifier:@"cells" forIndexPath:indexPath];
    cell.categoryName.text = [categoryNames objectAtIndex:indexPath.row];

    return cell;
}

我尝试使用代码以编程方式检测屏幕大小并分配适当的单元格大小,

I tried detecting the screen size and assigning appropriate cell size programmatically using the code,

- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize sizes;


    CGSize result = [[UIScreen mainScreen] bounds].size;
    NSLog(@"%f",result.height);
    if(result.height == 480)
    {
        //Load 3.5 inch xib
        sizes =CGSizeMake(170.f, 170.f);
        NSLog(@"3gs");
    }
    else if(result.height == 568)
    {
        //Load 4 inch xib
        sizes =CGSizeMake(130.f, 130.f);
        NSLog(@"5s");

    }
    else if(result.height == 667.000000)
    {
        //Load 4.7 inch xib
        sizes =CGSizeMake(160.f, 160.f);
        NSLog(@"6");

    }
    else
    {
        NSLog(@"else");

        sizes =CGSizeMake(170.f, 165.f);

    }
    return sizes;
}

但我也知道这不是正确的方法,所以请给我一个正确的处理方法.

But I also know that this isn't the right way, so please give me a right way to handle this.

推荐答案

你不需要检查设备大小,因为我们可以使用 collectionView 宽度来计算单元格的宽度.使用单元格宽度,您可以根据需要计算高度.

You need not check the device size because we can use the collectionView width to calculate the width of the cell. Using the cell width you can calculate the height as per your need.

还有一件事:你需要使用 UICollectionViewDelegateFlowLayout &确认代表 &下面实现方法

One more thing: You need to use UICollectionViewDelegateFlowLayout & confirm the delegate & implement method below

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

   let padding: CGFloat =  50
   let collectionViewSize = collectionView.frame.size.width - padding

   return CGSizeMake(collectionViewSize/2, collectionViewSize/2)
   
}

更新:Swift 4.0

  func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let padding: CGFloat =  50
        let collectionViewSize = collectionView.frame.size.width - padding
        
        return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)
    }

注意:我已经回答了考虑到单元格是正方形大小的问题

Note: I have answered the question considering the cells are square sized

补充信息:请确保您没有估计大小 https://i.stack.imgur.com/B9kmU.png

Addition Information: Please make sure you make estimated size none https://i.stack.imgur.com/B9kmU.png

这篇关于使用情节提要在 CollectionView 中仅显示两列,多行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆