CollectionView水平滚动在ios 7中不起作用

时间:2015-10-20 10:07:29

标签: ios

CollectionView水平滚动在ios 7中不起作用,但它在ios 8和9中工作正常。有没有解决方案呢?

守则在这里:

UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
layout.itemSize = CGSizeMake(330, 100);

collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0, 50.0, 350, 100) collectionViewLayout:layout];
collection.delegate = self;
collection.dataSource = self;
collection.backgroundColor = [UIColor greenColor];
collection.pagingEnabled = YES;

[collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@“Cell”];

[self.view addSubview:collection];

3 个答案:

答案 0 :(得分:0)

它现在符合我的需求,可能对其他人有用,所以这是我的代码: 我在iOS7-8-9中测试过。以下示例适用于默认iPad。您只需要更改目标设置和O.S版本。

<强> https://github.com/philippeauriach/fullyhorizontalcollectionview

请下载它&amp;让我们知道你的评论。快乐的编码!

如果要在View上添加集合视图,请使用下面的代码。下面的代码我已经以编程方式创建了CL View,它也可以与Autolayout和iOS 7-8-9一起正常工作。请执行以下代码,并告诉我们您的意见。

.H文件

@interface HorizontalCollectionViewController : UIViewController<UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>{

    NSIndexPath *visibleIndexPath;
}
@property (nonatomic, assign) NSInteger selectedCell;

@property (strong, nonatomic) IBOutlet UICollectionView *horizonCLView;

.M文件

#import "HorizontalCollectionViewController.h"
static NSString * const CellIdentifier = @“horizonCell";

@interface HorizontalCollectionViewController ()

@end

@implementation HorizontalCollectionViewController

@synthesize horizonCLView;


- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"view frame : %@",NSStringFromCGRect(self.view.frame));


    [self.view layoutIfNeeded];
    [self.view setNeedsLayout];
    [self viewDidLayoutSubviews];


    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    layout.itemSize = self.view.frame.size;
    [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
    [layout setMinimumInteritemSpacing:0.f];
    [layout setMinimumLineSpacing:0.f];
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);


    horizonCLView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout];
    horizonCLView.dataSource = self;
    horizonCLView.delegate = self;
    horizonCLView.backgroundColor = [UIColor lightGrayColor];
    horizonCLView.scrollEnabled = YES;
    [horizonCLView setBounces:NO];
    [horizonCLView setUserInteractionEnabled:YES];
    [horizonCLView setPagingEnabled:YES];
    [horizonCLView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CellIdentifier];
    [self.view addSubview:horizonCLView];
}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

}

-(void)viewWillAppear:(BOOL)animated{


    //Select Current Image For Sare In Social Media
   // currentImageIndex = selectedCell;

    [horizonCLView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:selectedCell inSection:0] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];

    CGRect visibleRect = (CGRect){.origin = self.horizonCLView.contentOffset, .size = self.horizonCLView.bounds.size};
    CGPoint visiblePoint = CGPointMake(CGRectGetMidX(visibleRect), CGRectGetMidY(visibleRect));
    visibleIndexPath = [self.horizonCLView indexPathForItemAtPoint:visiblePoint];

  //  NSLog(@"visibleIndexPath.row in View will appear %ld",(long)visibleIndexPath.row);

    //SelectedCell is a selected image from gallary view
    NSLog(@"selectedCell in View will appear: %ld",(long)selectedCell);


}

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

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
    return [dataAry count];
}

#pragma Here we set the frame of horizontal scrll view
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    // expand cell to fill the entire view
    return collectionView.frame.size;

}


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

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];

    self.title = [[self.dataAry objectAtIndex:indexPath.row] valueForKey:@“dataAryName"];

    //imageVI.image = nil;

    imageVI = (UIImageView *)[cell.contentView viewWithTag:100];
    if (!imageVI){

        imageVI = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.view.bounds.size.width,self.view.bounds.size.height)];
        imageVI.contentMode = UIViewContentModeScaleAspectFill;
        imageVI.tag = 100;
        imageVI.clipsToBounds = YES;
        [cell.contentView addSubview:imageVI];

    }

    dispatch_async(dispatch_get_main_queue(), ^{

        [asSetLib assetForURL:[NSURL URLWithString:[[self.dataAry objectAtIndex:indexPath.row] valueForKey:@"dataAryName"]] resultBlock:^(ALAsset *asset) {

            // imageVI.image = [UIImage imageWithCGImage:asset.defaultRepresentation.fullScreenImage];
            imageVI.image = [UIImage imageWithCGImage:asset.defaultRepresentation.fullResolutionImage];
            NSLog(@"Preview view into album loaded successfully!");

        } failureBlock:^(NSError *error) {
            NSLog(@"An error occurred while loading image: %@", error.description);
        }];

    });


    return cell;

}

答案 1 :(得分:0)

Sudha,我认为你的代码中的问题不是iOS7问题。 在这里,我查看了你的代码中的两个错误。

1)在这一行中,你给出了集合视图的静态宽度,

collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0, 50.0, 350, 100) collectionViewLayout:layout]; 

而不是看起来像,

collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width, 100) collectionViewLayout:layout];

确保您的收藏视图宽度尺寸始终与您的视图尺寸一致。

2)确保您的布局项目大小宽度高于集合视图宽度框架。否则滚动不受影响。

layout.itemSize = CGSizeMake(self.view.bounds.size.width+10, 100);

3)小心使用,

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

收集视图布局大小方法的委托方法。

4)最后你的代码看起来像,

- (void)viewDidLoad {
    [super viewDidLoad];

    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    layout.itemSize = CGSizeMake(self.view.bounds.size.width+10, 100);
    [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];

    collection = [[UICollectionView alloc] initWithFrame:CGRectMake(0.0, 50.0, self.view.bounds.size.width, 100) collectionViewLayout:layout];
    collection.delegate = self;
    collection.dataSource = self;
    collection.backgroundColor = [UIColor greenColor];
    collection.pagingEnabled = YES;
    collection.scrollEnabled = YES;
    collection.userInteractionEnabled = YES;
    [collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];

    [self.view addSubview:collection];

}

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

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

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

    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    return  cell;

}


Happy Coding!

答案 2 :(得分:-1)

在视图中添加了collectionView之后我已经使用了一行代码,它在ios 7中工作正常。

在[self addSubview:self.collectionView];

之后添加此代码

这里是代码:

[self performSelector:@selector(update)withObject:nil afterDelay:1];

  • (void)更新{ [self.collectionView setContentOffset:CGPointMake(1,0)]; }