美文网首页iOS常用
iOS商城类常用的菜单自定义 Layout

iOS商城类常用的菜单自定义 Layout

作者: 9岁就很6 | 来源:发表于2021-03-16 11:00 被阅读0次

    点h

    
    
    @interface EGUHorizontalPageableLayout : UICollectionViewFlowLayout
    ///  一行中 cell 的个数
    @property (nonatomic, assign) NSUInteger itemCountPerRow;
    
    ///    一页显示多少行
    @property (nonatomic, assign) NSUInteger rowCount;
    @end
    
    
    

    点m

    #import “EGUHorizontalPageableLayout.h”
    
    @implementation EGUHorizontalPageableLayout
    - (instancetype)init
    {
        if (self = [super init]) {
        }
        return self;
    }
    
    - (void)prepareLayout
    {
        [super prepareLayout];
    }
    
    - (CGSize)collectionViewContentSize
    {
        NSInteger count = [self.collectionView numberOfItemsInSection:0];
        CGFloat rows = count / (self.rowCount * self.itemCountPerRow  * 1.0);
        return CGSizeMake(ceilf(rows) * SCREEN_WIDTH , 1);
    }
    
    - (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
    {
        
        
        NSUInteger item = indexPath.item;
    
        //创建布局实例
        UICollectionViewLayoutAttributes *attrs = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
        
        attrs.frame = [self targetPositionWithItem:item];
        
        return attrs;
    }
    
    - (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
    {
         NSMutableArray *arrayM = [NSMutableArray array];
           NSInteger count = [self.collectionView numberOfItemsInSection:0];
           
           //给每一个item创建并设置布局属性
           for (int i = 0; i < count; i++)
           {
               //创建item的布局属性
               UICollectionViewLayoutAttributes *attrs = [self layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForItem:i inSection:0]];
               
                [arrayM addObject:attrs];
           }
           return arrayM;
    }
    
    
    - (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
    {
        return YES;
    }
    
    
    // 根据 item 计算目标item的位置
    // x 横向偏移  y 竖向偏移
    - (CGRect)targetPositionWithItem:(NSUInteger)item
    {
        NSInteger page = item/(self.itemCountPerRow*self.rowCount) * SCREEN_WIDTH;
        CGFloat xOffset = self.sectionInset.left;
        CGFloat yOffset = self.sectionInset.top;
        NSInteger theX = item % self.itemCountPerRow * (self.itemSize.width +  self.minimumLineSpacing) + page + xOffset;
        NSInteger theY = (item % (self.itemCountPerRow*self.rowCount)) / self.itemCountPerRow * (self.itemSize.height + self.minimumInteritemSpacing) + yOffset;
        return CGRectMake(theX, theY, self.itemSize.width, self.itemSize.height);
        
    }
    @end
    
    

    使用

    EGUHorizontalPageableLayout *layout = [[EGUHorizontalPageableLayout alloc]init];
            layout.sectionInset = UIEdgeInsetsMake(0, 16, 16, 16);
            layout.itemSize = CGSizeMake(SCREEN_WIDTH / 5, 70);
            layout.minimumLineSpacing = 26;
            layout.minimumInteritemSpacing = 4;
            layout.itemCountPerRow = 5;
            layout.rowCount = 2;
            layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    

    效果图

    image.png

    相关文章

      网友评论

        本文标题:iOS商城类常用的菜单自定义 Layout

        本文链接:https://www.haomeiwen.com/subject/ygnrcltx.html