实现瀑布流最重要的一步就是重写UICollectionViewFlowLayout类, 下面就简单介绍一下实现原理 本方法实现的仅是高度不一样, 宽度是根据屏宽平均分的; 当创建UICollectionView 的UICollectionViewFlowLayout属性时,给它传进去了两个属性: 列数, 和需要显示的Model数组 (这里是商品model(图片,价钱)) WaterfallFlowLayout.h // WaterfallFlowLayout.h @interface WaterfallFlowLayout : UICollectionViewFlowLayout // 总列数 @property
系统默认给我们提供了一种layout——UICollectionViewFlowLayout。 UICollectionViewFlowLayout的设计理念就是,item现在一行中依次排列,一行满了之后就换一行接着排列剩余的Item。 通过UICollectionViewFlowLayout中的itemSize属性是将所有的Item都设置成一个统一的样式,如果我们需要对特定的item进行自定义样式,那么就需要实现UICollectionViewDelegateFlowLayout UICollectionViewLayout是一个抽象类,上面我讲了UICollectionViewFlowLayout,它是系统为我们提供的继承自UICollectionViewLayout的用于流式布局的
UICollectionView系列三——使用FlowLayout进行更灵活布局 一、引言 前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init]; layout.scrollDirection 三、UICollectionViewFlowLayout相关属性方法 UICollectionViewFlowLayout是系统提供给我们一个封装好的流布局设置类,其中有一些布局属性我们可以进行设置
iOS流布局UICollectionView系列四——自定义FlowLayout进行瀑布流布局 一、引言 前几篇博客从UICollectionView的基础应用到设置UICollectionViewFlowLayout 二、进行自定义瀑布流布局 首先,我们新建一个文件继承于UICollectionViewFlowLayout: @interface MyLayout : UICollectionViewFlowLayout 为了演示的方面,这里我不错更多的封装,添加一个属性,直接让外界将item个数传递进来,我们把重心方法重写布局的方法上: @interface MyLayout : UICollectionViewFlowLayout @property(nonatomic,assign)int itemCount; @end 前面说过,UICollectionViewFlowLayout是一个专门用来管理collectionView
然后要用 layout 控制布局,用最常用的 UICollectionViewFlowLayout 就行了,设置单元格的宽高,既然是翻页,宽肯定是跟屏幕等宽,高度就看你需求了,但是不要超过 collectionView 的高,如下: lazy var layout: UICollectionViewFlowLayout = { let lazyLayout = UICollectionViewFlowLayout
ViewController () @end @implementation ViewController (void)viewDidLoad { [super viewDidLoad]; //确定是水平滚动,还是垂直滚动 UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init]; [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical
UICollectionViewFlowLayout类是UICollectionViewLayout类的子类,对于复杂的布局,可以自定义UICollectionViewLayout类。 [layer setBorderColor:[YSLUiUtils colorSeven].CGColor]; layer.cornerRadius = 3.0f; } 复制代码 #####UICollectionViewFlowLayout 流布局管理器 UICollectionViewFlowLayout是一种流布局管理器,即从左到右从上到下布局。 #####流布局管理器的一些常见属性 初始化:UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init
基于 UICollectionViewFlowLayout,实现一个支持多 section 的瀑布流组件 最近因项目需求,写了一个支持多 section 的瀑布流实现组件,完全基于 swift 初始化 因为基于 UICollectionViewFlowLayout 实现的,所以该 flowLayout 的初始化调用流程与系统的无异,只需要遵循 WaterfallMutiSectionDelegate
还得依靠我们的 UICollectionViewFlowLayout;在 UICollectionViewFlowLayout 的定义中提供了一个可重写的函数: func targetContentOffset 最后记录最新的偏移坐标,然后返回 UICollectionView 停止滚动时的偏移量 Talk is cheap, show me the code, 代码实现如下: class RowStyleLayout: UICollectionViewFlowLayout
1.UICollectionViewFlowLayout 最简单也是最常用的默认layout对象,UICollectionViewFlowLayout。 UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section; // 设定指定区内Cell的最小行距,也可以直接设置UICollectionViewFlowLayout collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section // 设定指定区内Cell的最小间距,也可以直接设置UICollectionViewFlowLayout
没错就是 prepare 方法, 我们重点也是在这里进行的,下面代码注释写的很仔细的,要是有不理解的地方可以留言或者Q我,具体的肯定是我们继承 UICollectionViewFlowLayout 写了 (要是你也是流式布局的话,要不是你再找UICollectionViewFlowLayout的父亲去继承开发),这里需要注意UICollectionViewFlowLayout 和 UICollectionViewDelegateFlowLayout 按照如下定义一个PPBaseFlowLayout继承与UICollectionViewFlowLayout,在里面我们重写prepare这个方法。 elementKind, at: indexPath) } } 下面就是我们的 -- PPCollectionViewFlowLayout class PPCollectionViewFlowLayout: UICollectionViewFlowLayout
scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout*)self.collectionViewLayout; //实际滑动的距离 float pageWidth 通过代理通知controller当前的cellitem - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout*)self.collectionViewLayout; //实际滑动的距离 int pageWidth = _collectionView) { UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init
self.collectionView.backgroundColor = UIColor.clear; self.collectionView.isScrollEnabled = false; let flowLayout = UICollectionViewFlowLayout self.collectionView.showsVerticalScrollIndicator = false; self.collectionView.scrollEnabled = true; self.collectionView.pagingEnabled = true; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init]; flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal
//CollectionView的样式 UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc]
,UICollectionViewDelegateFlowLayout> 然后初始化UICollectionVIew – (void)initCollectionView { //先实例化一个层 UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init]; //创建一屏的视图大小 UICollectionView *collectionView=[
Apple为我们提供了一个最简单可能也是最常用的默认layout对象,UICollectionViewFlowLayout。 而Apple给出的UICollectionViewFlowLayout已经是一个很强力的layout方案了。 *flowLayout=[[UICollectionViewFlowLayout alloc] init]; [flowLayout setScrollDirection: UICollectionViewScrollDirectionVertical { _infoVM= infoVM; [self reloadSubViews]; } 3 开发技巧 3.1 布局技巧 3.1.1 设置每一行显示cell个数 需要用到UICollectionViewFlowLayout 单元格等间距实现 继承并自定义实现layoutAttributesForElementsInRect方法 @interface HJCollectionViewEqualWidthFlowLayout : UICollectionViewFlowLayout
今天在写一个功能的时候用到了Dictionary 的 grouping by 这个用法,代码先贴出来 import UIKit class AlignFlowLayout: UICollectionViewFlowLayout minimumInteritemSpacing } } return layoutAttributes } } 可以看出来这这个代码是做了一个UICollectionViewFlowLayout
说到布局 layout,大家在开发过程中与 UICollectionView 搭配使用最多的 应该就是 UICollectionViewFlowLayout 了,这是 UIKit 提供给开发者最基础的的网格布局 自定义布局 日常开发中,我们使用 UICollectionView 控件都会搭配一个默认的,提供一些基础的布局 UICollectionViewFlowLayout 来使用,但是当我们需要实现定制化程度比较高的界面时 既然 Apple 的开发文档已经说得很明白了,那么我们就可以先完成这些基础的工作: 1.创建一个继承自 UICollectionViewFlowLayout 的类 WaterFallFlowLayout2 waterFlowLayout: WaterFallFlowLayout, itemHeight indexPath: IndexPath) -> CGFloat } class WaterFallFlowLayout: UICollectionViewFlowLayout
只能通过注册来确定重用标识符,什么叫注册,我们还是看代码: - (void)viewDidLoad { [super viewDidLoad]; // cell的布局方式,默认流水布局(UICollectionViewFlowLayout ) UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; // 设置滚动方式为水平
let layout = UICollectionViewFlowLayout() colltionView = UICollectionView(frame: CGRectMake(0 super.viewDidLoad() initView() } func initView(){ let layout = UICollectionViewFlowLayout