zoukankan      html  css  js  c++  java
  • 关于CollectionView布局问题

    个人在做新特性界面时,时长会犯的错误,总结一下,希望对大家有帮助.

    1.如果我们使用的是storyboard中的CollectionView,它的布局继承的是      

    UICollectionViewFlowLayout;大部分情况下我们会用到它;CollectionView中的cell没有UILable,UIImageView等控件,所以一般我们会自定义cell,并创建相应的xib来注册注册重用的cell

    [self.collectionView registerNib:[UINib nibWithNibName:@"MyCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:reuseIdentifier];

     如果不需要自定义cell则用:

     [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

    还有一些常用属性:

     // 1.设置分页

        self.collectionView.pagingEnabled = YES;

        // 2.去除滚动条

        self.collectionView.showsHorizontalScrollIndicator = NO;

        // 3.去除回弹效果

        self.collectionView.bounces = NO;

    2.一定不要忘了设置cell大小

    #import <UIKit/UIKit.h>

    @interface MyLayout : UICollectionViewFlowLayout

     @end

     #import "MyLayout.h"

    @implementation MyLayout

    -(void)prepareLayout {

        self.itemSize = CGSizeMake(375, 667);

    //设置滚动方向为水平滚动

        self.scrollDirection = UICollectionViewScrollDirectionHorizontal;

    //    self.sectionInset = UIEdgeInsetsMake(0, 10, 0, 10);

    }

    @end

    3.自定义布局:下面是我自定义布局实现的效果,需用到下面两个方法

    #import "MyCircleLayout.h"

     @implementation MyCircleLayout

    //设置cell布局

    -(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {

        NSMutableArray *arrayM = [NSMutableArray array];

    // 获取section对应的cell的总数

        NSUInteger count = [self.collectionView numberOfItemsInSection:0];

        for (int i = 0; i< count; i++) {

    //创建i位置cell的对应的IndexPath

            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];

    //        创建i位置cell的属性

            UICollectionViewLayoutAttributes *atts = [self layoutAttributesForItemAtIndexPath:indexPath];

            [arrayM addObject:atts];

        }

        return arrayM;

    }

    //返回indexPath对应cell 的布局属性

    -(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath {

        NSInteger count = [self.collectionView numberOfItemsInSection:indexPath.section];

    //    半径

        CGFloat radius = 100;

        CGFloat centerX = self.collectionView.frame.size.width * 0.5;

        CGFloat centerY = self.collectionView.frame.size.height * 0.5;

    //    单位旋转角度

        CGFloat rota = 2 * M_PI / count;

    //    创建i位置对应cell属性

        UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];

        attrs.size = CGSizeMake(50, 50);

        if (count == 1) {

            attrs.center = CGPointMake(centerX, centerY);

        } else {

            CGFloat angle = rota * indexPath.item;

    //    cell中心坐标

            CGFloat attrsCenterX = centerX + radius * cos(angle);

            CGFloat attrsCenterY = centerY + radius * sin(angle);

            attrs.center = CGPointMake(attrsCenterX, attrsCenterY);

        }

        return attrs;

    }

    @end

  • 相关阅读:
    spring中@Lookup的作用
    spring中的观察者模式
    spring事务源码解析
    spring中@Configuration注解的作用
    HTML5和CSS3
    TCP/IP协议
    Android项目的settings.gradle和build.gradle
    AndroidManifest.xml 最全详解
    Android实现网络监听
    Android数据存取
  • 原文地址:https://www.cnblogs.com/paideblogs/p/4937898.html
Copyright © 2011-2022 走看看