如何以编程方式删除UICollectionView中的行间距?

时间:2015-08-19 07:06:06

标签: ios objective-c iphone

我有一个UICollectionView,我不能在行之间得到0个间距。我在UICollectionViewDelegateFlowLayout课程中添加了.h并已实施

(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section

(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout
minimumInteritemSpacingForSectionAtIndex:(NSInteger)section**

方法将它们设置为返回0.0。同样在ViewDidLoad我动态创建了UICollectionViewFlowLayoutUICollectionView。对于UICollectionViewFlowLayout,我将minimumInteritemSpacingminimumLineSpacing设置为0,但行之间的空间仍然大于0.

这是我的代码:

- (void)initializeCollectionView {

UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(50, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[flowLayout setMinimumLineSpacing:0.0];

flowLayout.minimumInteritemSpacing = 0;
flowLayout.minimumLineSpacing = 0;

collView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 50, self.view.frame.size.width, self.view.frame.size.height-70) collectionViewLayout:flowLayout];
[collView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];

[collView setBackgroundColor:[UIColor grayColor]];

collView.delegate = self;
collView.dataSource = self;

[[self view] addSubview:collView];

}




- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}


- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {

return 1;

}


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {

return 100;

}



- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {

return 0.0;

}


- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout
minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {

return 0.0;

 }


- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {

return UIEdgeInsetsMake(0, 0, 0, 0);

}

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我是以一种不同的方式做到的。我以编程方式创建了一个collectionView,并将其添加到视图Controller中。在我的CollectionView Custom Class中,我进行了所有自定义。

我的自定义收藏视图界面文件 -

#import <UIKit/UIKit.h>
#import "CustomCell.h"


@interface CustomCollectionView : UIView<UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UICollectionViewDelegate>

    @property(nonatomic, strong) UICollectionView *myCollectionView;

@end

现在在实现File(CustomCollectionView.m)中,首先我必须初始化并添加我的collectionView。

一旦绘制视图,就会调用

initWithFrame。所以,我在这个视图中添加了我的collectionView,并让这个视图处理所有委托方法来自定义我的集合视图并通过数据源方法填充数据。

-(id)initWithFrame:(CGRect)frame{
    self=[super initWithFrame:frame];
    if(self){
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];

        flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
        self.myCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 20, frame.size.width, frame.size.height) collectionViewLayout:flowLayout];
        self.myCollectionView.backgroundColor=[UIColor whiteColor];

        self.myCollectionView.delegate=self;
        self.myCollectionView.dataSource=self;

        [self.myCollectionView registerClass:[CustomCell class] forCellWithReuseIdentifier:@"customCell"];

        [self addSubview:self.myCollectionView];
    }
    return self;
}

现在,让我们实现UICollectionViewDelegateFlowLayout方法

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 0;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 0;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    //here I just made sure that I have square spaces boxes as my cell size
    int width = self.myCollectionView.frame.size.width/5;
    int height = width;
    return CGSizeMake(width, height);
}

现在是UICollectionView数据源

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return 5;
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
    return 7;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{

    CustomCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:@"customCell" forIndexPath:indexPath];
    if(cell){
       //customize the cell here
       return cell;
    }
}

现在,当我使用collectionView的自定义视图准备就绪时,我只是将它添加到我的viewController。

- (void)viewDidLoad {
    [super viewDidLoad];

    CustomCollectionView *myCollectionView = [[CustomCollectionView alloc]initWithFrame:CGRectMake(0, 10, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview: myCollectionView];

}

以上对我有用。您可以使用storyboard,但当我尝试自定义由IBOutlet连接的collectionView时,我发现了一些复杂功能。所以,我采用了这种方法。可能有更好的方法来做到这一点。