UICollectionView 使用 Objective-C 中的代码进行垂直分页

Posted

技术标签:

【中文标题】UICollectionView 使用 Objective-C 中的代码进行垂直分页【英文标题】:UICollectionView Vertical Paging With Code In Objective-C 【发布时间】:2017-06-29 12:04:46 【问题描述】:

我有一个 ViewController mycollectionview 并在其中创建一个 UICollectionView collection view 并将大小设置为框架大小。我有一个自定义 UICollectionViewCell CollectionViewCell 类。图像大小不同,我只想显示一个单元格并同时完全适合屏幕(不滚动时)。 这是mycollectionview 代码:

- (void)viewDidLoad

    [super viewDidLoad];
    imgnum = @[@"1.jpg",@"2.jpg",@"3.jpeg",@"4.jpg"];
    UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
    layout.itemSize = CGSizeMake(80.0, 80.0);
    collectionview = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
    collectionview.translatesAutoresizingMaskIntoConstraints = NO;
    collectionview.delegate = self;
    collectionview.dataSource = self;
    collectionview.bounces = false;
    [collectionview registerClass:[CollectionViewCell class] forCellWithReuseIdentifier:reuseIdentifier];
    [self.view addSubview:collectionview];


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

    CollectionViewCell *cell = [collectionview dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
    cell.pic.image = [UIImage imageNamed:imgnum[indexPath.row%4]];
    cell.lab.text = @"Eiffel";
    return cell;


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

    float w = self.view.frame.size.width;
    CGSize a = [UIImage imageNamed:imgnum[indexPath.row%4]].size;
    float aspect = a.width/a.height;
    return CGSizeMake(w, w * 1/aspect);

这是我的CollectionViewCell 代码:

- (void)initialize

    _pic = [UIImageView new];
    _pic.translatesAutoresizingMaskIntoConstraints=false;
    [self.contentView addSubview:_pic];
    _lab = [UILabel new];
    _lab.textColor = [UIColor blackColor];
    _lab.translatesAutoresizingMaskIntoConstraints = false;
    [self.contentView addSubview:_lab];

【问题讨论】:

我建议你不要使用这个 CGSize a = [UIImage imageNamed:imgnum[indexPath.row%4]].size;作为您的图像大小,如果超过设备框架高度,它将产生问题并扩展单元格以变为可滚动。您想一次显示一张图像,所以我会说将内容单元高度设置为与设备高度或集合视图的框架相同。稍后设置 UIImageview setContentMode : AspectFit 使图像适合在一个单元格中,并且一次滚动一个 iamge 可以工作。 @VickyDhas 是的,这是一个很好的解决方案,感谢您的帮助 如果您接受解决方案,您可以在评论中点赞 【参考方案1】:

我建议你不要使用这个 CGSize a = [UIImage imageNamed:imgnum[indexPath.row%4]].size;作为您的图像大小,如果超过设备框架高度,它将产生问题并扩展单元格以变为可滚动。

    您想一次显示一张图像,所以我会说将内容单元高度设置为与设备高度或集合视图的框架相同。 稍后设置 UIImageview setContentMode : AspectFit 以便图像适合在一个单元格中,并且您一次可以滚动一张图像。

查看我为您创建的示例,希望对您有所帮助。http://www.filedropper.com/collectionviewperpageex

【讨论】:

感谢您的帮助。在你所说的这种类型的集合视图中,如果在 2 个图像之间释放滚动,屏幕会在 2 个图像而不是 1 个图像的帧处停止。我希望它显示最近的图像。 然后仅使用页面控制和滚动视图,或者手动将滚动插图移动到下一页矩形。在 cocacontrols.com 网站中查找 MediaGallery 原型

以上是关于UICollectionView 使用 Objective-C 中的代码进行垂直分页的主要内容,如果未能解决你的问题,请参考以下文章

js中直接输出一个object对象显示的是[object Objec

UICollectionView的使用

iOS 流布局 UICollectionView使用(UICollectionVIew的代理方法)

UICollectionView介绍使用

可枚举属性和不可枚举属性(for...in循环和Objec.keys()和Object.getOwnPropertyNames())

使用 NSFetchResultsController 时 UICollectionView 滚动不流畅