簡體   English   中英

CollectionView水平滾動在iOS 7中不起作用

[英]CollectionView Horizontal scroll not working in ios 7

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;

[收集registerClass:[UICollectionViewCell類] for CellWithReuseIdentifier:@“ Cell”];

[self.view addSubview:collection];

現在它可以滿足我的需求,並且可能對其他人有用,所以這是我的代碼:我已經在iOS7-8-9中進行了測試。 下面的示例適用於默認iPad。 您只需要更改目標設置和操作系統版本。

https://github.com/philippeauriach/fullyhorizo​​ntalcollectionview

請下載並告訴我們您的評論。 編碼愉快!

如果要將集合視圖添加到視圖,請使用以下代碼。 下面的代碼我已經以編程方式創建了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;

}

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;

collectionview布局大小方法的委托方法。

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!

我在視圖上添加collectionView后使用了一行代碼,該視圖在ios 7中也可以正常工作。

在[self addSubview:self.collectionView]之后添加此代碼;

這里的代碼:

[使用對象:nil afterDelay:1自行執行performSelector:@selector(update)];

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM