【问题标题】:Adjust UICollectionViewCells Size for 4/3.5 inches screens调整 4/3.5 英寸屏幕的 UICollectionViewCells 大小
【发布时间】:2014-03-27 22:13:35
【问题描述】:

我正在尝试 UICollectionView 功能(这是一个非常好的功能......)。一件事尚不清楚 - 如何支持与 UICollectionViewCells 大小相关的 4 英寸和 3.5 英寸屏幕。我希望边缘之间和单元格之间的间隙保持不变,并根据设备改变单元格大小。

我应该如何处理这个问题?

【问题讨论】:

    标签: ios iphone uicollectionview autolayout uicollectionviewcell


    【解决方案1】:

    你应该首先继承UICollectionViewFlowLayout。头文件中的一些实现可以是这样的:

    @interface CustomCollectionViewLayout : UICollectionViewFlowLayout
    
    @end
    

    以及实现文件:

    @implementation CustomCollectionViewLayout
    
    -(id) init
    {
        if(self = [super init])
        {
            BOOL is4Inch = ([[UIScreen mainScreen] bounds].size.height == 568.0);
            CGSize ItemSize = is4Inch ? CGSizeMake(150, 120) : CGSizeMake(90, 72);
            [self setItemSize:ItemSize];
            [self setMinimumInteritemSpacing:10.0];
            [self setMinimumLineSpacing:10.0];
            [self setScrollDirection:UICollectionViewScrollDirectionVertical];
            [self setHeaderReferenceSize:CGSizeMake(0, 5)];
            [self setFooterReferenceSize:CGSizeMake(0, 20)];
            [self setSectionInset:UIEdgeInsetsMake(0, 10, 0, 10)];
        }
    
        return self;
    }
    
    @end
    

    然后你应该设置你的UICollectionView的布局,比如:

    CustomCollectionViewLayout * customLayout = [[CustomCollectionViewLayout alloc] init];
    self.collectionView = [[UICollectionView alloc] initWithFrame:someFrame collectionViewLayout:customLayout];
    

    或喜欢:

    [self.collectionView setCollectionViewLayout:customLayout animated:YES];
    

    【讨论】:

    • 我可以在这个方法(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section上设置UICollectionView'slayout或者我应该设置哪个方法
    • 其实你不能用那个方法设置UICollectionView的布局。它只是UICollectionViewDelegateFlowLayout 的一种方法,用于决定某个部分的minimumLineSpacing。您可以使用所需的UICollectionViewDelegateFlowLayout 方法来确定每个sectionindexPath 的间距和大小。如果您不需要特定元素的措施,您可以使用我的示例。
    • 文档还指出:该协议中的所有方法都是可选的。如果您不实现特定方法,则流布局委托将使用其自身属性中的值来获取适当的间距信息。流布局对象期望集合视图的委托对象采用此协议。因此,在分配给集合视图的委托属性的对象上实现此协议。
    • 你写的代码是4英寸屏幕的,我必须把其他代码放到3.5英寸屏幕上?
    • 不,它只用于决定ItemSize变量。您也可以根据屏幕大小决定其他,例如minimumInteritemSpacing。我没有更改其他人,因为您在问题中说过:我希望边缘之间和单元格之间的间隙保持不变
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2014-05-29
    • 2015-03-29
    相关资源
    最近更新 更多