首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS瀑布实现

Simulator Screen Shot - iPhone 8 - 2020-01-16 at 17.32.16.png 2、实现思路 根据瀑布列数,创建记录maxY字典,例如两列瀑布,就创建两个...Key去记录左右两列当前最大maxY // 初始化字典,有几列就有几个键值对,key为列,value为列最大y值, // 初始值为上内边距 for (int i = 0; i < self.column...; i++) { self.maxYDic[@(i)] = @(self.sectionInset.top); } 根据设置列数,列间隙,以及左右inset,确定itemWidth - (CGFloat...在左列,还是右列,确定itemY和itemX,从而确定itemframe /// 找出最短一列 __block NSNumber *minIndex = @(0); [self.maxYDic...itemY = [self.maxYDic[minIndex] floatValue] + self.rowSpacing; } }else{ // 瀑布多列情况

1.9K10
您找到你想要的搜索结果了吗?
是的
没有找到

iOS 瀑布实现「建议收藏」

dictionary]; //设置代理为主控制器,我们瀑布是继承于系统流式布局,而流式布局又继承于collectioinviewlayout,它里面有collectionview...//layoutAttributesForItemAtIndexPath方法实现,这里用到了一个布局字典,其实就是将每个cell位置信息与indexPath相对应,将它们放到字典中,方便后面视图检索...然后我们注意到最后调用了一个我们自己写方法 layoutItemAtIndexPath ,它实现如下: #pragma mark - 将各个cellfream等信息放入字典中 -(void)layoutItemAtIndexPath...既然要实现实现瀑布,就需要比较每一列高度,然后把要插入item插入到高度最小那一列去。因此,我们需要比较每一列高度,找出最小列。...5.设置滑动contentSize //实现这个方法,跟前面找出最小列高度方法如出一辙 -(CGSize)collectionViewContentSize{ CGSize size =

2K41

iOS 瀑布封装

[瀑布.gif] 功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout基础上封装带头脚视图瀑布控件。...目前支持竖向瀑布(item等宽不等高、支持头脚视图)、水平瀑布(item等高不等宽 不支持头脚视图)、竖向瀑布( item等高不等宽、支持头脚视图)三种样式瀑布流布局。...前言 :近几个月一直在忙公司ChinaDaily和国务院项目,没有抽出时间来写简书,现在终于算是告一段落了,抽出时间来更一篇 实现:主要是重写父类几个涉及布局属性方法,在对应布局属性方法中根据需求自定义视图布局属性信息...下面是WSLWaterFlowLayout.h中属性方法和代理方法,含义注释还算清晰: typedef enum { WSLVerticalWaterFlow = 0, /** 竖向瀑布...item等宽不等高 */ WSLHorizontalWaterFlow = 1, /** 水平瀑布 item等高不等宽 不支持头脚视图*/ WSLVHWaterFlow = 2, /

1.6K80

iOS 瀑布封装

瀑布.gif 功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout基础上封装带头脚视图瀑布控件。...目前支持竖向瀑布(item等宽不等高、支持头脚视图)、水平瀑布(item等高不等宽 不支持头脚视图)、竖向瀑布( item等高不等宽、支持头脚视图)三种样式瀑布流布局。...前言 :近几个月一直在忙公司ChinaDaily和国务院项目,没有抽出时间来写简书,现在终于算是告一段落了,抽出时间来更一篇 实现:主要是重写父类几个涉及布局属性方法,在对应布局属性方法中根据需求自定义视图布局属性信息...下面是WSLWaterFlowLayout.h中属性方法和代理方法,含义注释还算清晰: typedef enum { WSLVerticalWaterFlow = 0, /** 竖向瀑布...item等宽不等高 */ WSLHorizontalWaterFlow = 1, /** 水平瀑布 item等高不等宽 不支持头脚视图*/ WSLVHWaterFlow = 2, /

2K80

iOS 瀑布之栅格布局

实现栅格布局效果示意图 需求示意图 确定需求 由上面的需求示意图可知模块最小单位是正方形,边长是屏幕宽除去边距间隔后四等份,而每个模块样式有小正方形(1:1)、大正方形(2:2)、横长方形(2...:1)、纵长方形(1:2),动态根据服务器下发模块样式绘制布局,可以横向滑动,限定为两行高度。...实现思路 由上需求分析可知,我们可以让后台每个模块下发width和height两个字段,字段值是1或2就行了,然后我们就能根据宽高字段来确定模块宽高了。现在宽高有了,我们怎么来绘制模块呢?...return CGRectMake(x, y, w, h); } 后台下发字段格式示意图 功能描述:WSLWaterFlowLayout 是在继承于UICollectionViewLayout基础上封装带头脚视图瀑布控件...目前支持竖向瀑布(item等宽不等高、支持头脚视图)、水平瀑布(item等高不等宽 不支持头脚视图)、竖向瀑布( item等高不等宽、支持头脚视图)、栅格布局瀑布 4种样式瀑布流布局。

1.7K10

iOS---UICollectionView自定义流布局实现瀑布效果

自定义布局,实现瀑布效果 自定义流水布局,继承UICollectionViewLayout 实现一下方法 // 每次布局之前准备 - (void)prepareLayout; // 返回所有的尺寸...- (CGSize)collectionViewContentSize; // 返回indexPath这个位置Item布局属性 - (UICollectionViewLayoutAttributes...:(CGRect)rect; 思路:默认有三列,添加图片时,往三列中最大长度最小那一列添加, 主要工作就在计算最大Y值,然后布局图片 用一个字典用来存储每一列最大Y值(每一列高度) 遍历字典找出最短那一列...,必须包含图片高度和宽度,以此可以根据宽高比布局,根据宽度可以通过代理计算高度。...height = [self.delegate flowLayout:self heightForWidth:width atIndexPath:indexPath]; // 2.0假设最短那一列

2K100

四种方式实现瀑布

css3column属性实现 外层容器设置column-count(改变列数)和column-gap(改变间隙),即可实现瀑布流布局 css瀑布...,都是利用多列模拟瀑布 flex-direction: row,将flexbox设置成横向(行)排列 flex-direction: column,将flexbox设置纵向(列)排列 在外层容器设置...,利用定位进行显示 瀑布每张图片宽度都是固定,不同是每张图片高度,利用这一点,可以确定第一行图片张数,以及第一行每张图片offsetHieght值,将第一行每张(或者说每一列)offsetHieght...,让它保存最新每一列offsetHeight值,然后第二张第二张图片又继续找数组里面的最小offsetHieght,找到后将图片放到该位置后继续修改offsetHieght数组,遍历所有图片后即可实现瀑布效果

1K20

Web前端实现瀑布几种方法

瀑布效果图如下: 前端实现瀑布方法很多,其中最简单就是用CSS实现,其次是通过jQuery实现,最麻烦就是js,那么就从最麻烦开始吧$_$ 不管用哪种方法去实现瀑布效果,html文件里写法都是相同...先把html里内容粘贴如下: JS实现瀑布效果 不管是什么语言,实现瀑布效果基本思路都是一样,具体我就不说了,只聊干货,上代码。...--引入js代码--> 为了实现瀑布效果,我们需要把已有的数据先按照瀑布效果排列好,先来一个实现瀑布函数,有详细步骤注释...jQuery实现瀑布效果 首先要保证你有jQuery文件,然后导入jQuery文件,css文件跟js实现瀑布效果是一样,就不重新粘贴一遍了。...重点还是我们自己写js实现文件,道理跟js实现是一样,所以我连函数名起得都一样,不多说,两个主要函数直接粘贴如下: 实现瀑布函数 判断是否加载函数 加载数据 OK,jQuery实现瀑布效果搞定了

2.3K10

多栏布局与JS实现瀑布

css3属性之多栏布局与JS实现瀑布    背景:之前打算自己总结一下flex布局知识点,发现自己无从下手,原因在何处:我反思了一下,其实原因很简单,使用次数少,更多时间使用了百分比,浮动和定位解决...有的时候甚至出现了这样笔记: 我打算坚持写博客,不论自己总结有多么差劲,也要坚持写,哪怕几年后我看到以前笔记,自己会偷偷笑出声。想想原来大一时技术还是那样稚嫩啊。...设定值,否则就会减少栏数来增加每栏宽度 css3多列和JS实现瀑布  给自己安利一波吧,看到网上很多瀑布效果,哇,简直棒极了有没有;于是我迫不及待打开V**,打开了pinterest官网...自己也梳理梳理逻辑: 我们都不陌生瀑布是同宽,但是高度不一,js主要工作就是根据高度来进行布局, 1)当一行排满后,准备排第二行时候,...、clientHeight这些具体含义:可以参考前辈博客。

2.9K90

干货 | 如何实现jQuery响应式瀑布

开门见山,本文介绍响应式瀑布实现方法。 最终效果图如下,改变浏览器大小效果更棒哦~ ?...以下我们将每个瀑布盒子简称为box 使用数组记录每个box宽和高 ---- 设置不同屏幕宽度下每一行box数量 使用$(window).width()获取屏幕宽度 根据不同屏幕宽度设置每一行box数量...absolute";this.width = width;this.height = height;this.top = top;this.left = left;} 创建数组记录元素宽高 这里简述一下瀑布原理...使用数组boxArr保存每一竖列高度,即每一竖列最后一个box底部位置 使用瀑布原理计算每个box位置(left和top),并保存到数组boxStyleArr 123456789101112131415161718192021222324...,然后自己用jQuery实现,这也不失为创造乐趣呢。

1.8K20

分享一次纯 css 瀑布 和 js 瀑布

博客地址:https://ainyi.com/60 现在百度图片,360 图片搜索,都是以一种瀑布形式展示,那么接下来,分享一波纯 css 瀑布 和 js 瀑布 纯 css 写瀑布 multi-columns...方式 通过 Multi-columns 相关属性 column-count、column-gap 配合 break-inside 来实现瀑布流布局。...,体验就会很不好 我们想要是这样: [no351tx20r.jpeg] 要实现如上,只能通过 js 来写瀑布 js 写瀑布 html 结构与上面类似,但这里我用图片来做示例 <div class=...0.25s ease-in 2 alternate; } @keyframes bounceIn{ 100% { transform: scale(1.07); } } 重点:js 瀑布实现方式...waterFall(); }; // 初始化 window.onload = function(){ // 实现瀑布 waterFall(); } 大功告成,效果图是 [lr7t19y3v.jpeg

2.3K40

5 种瀑布场景实现原理解析

一、背景— 本文介绍 5 种瀑布场景实现,大家可以根据自身需求场景进行选择。...5 种场景分别是: 瀑布 特点 纵向+高度排序 纯 CSS 多列实现,是最简单瀑布写法 纵向+高度排序+根据宽度自适应列数 通过 JS 根据屏幕宽度计算列数,在 web 端更加灵活展示瀑布 横向...纯 CSS 弹性布局实现,是最简单横向瀑布写法 横向+高度排序 横向+高度排序瀑布,需要通过 JS 计算每一列高度,损耗性能,但是可以避免某列特别长情况,体验更好 横向+高度排序+根据宽度自适应列数...下图就是一个瀑布流布局示意图: 三、纵向+高度排序— 纵向+高度排序指的是,每列按照纵向排列,往高度最小列添加内容,如下图所示。 实现纵向+高度排序瀑布方法是 CSS 多列布局。 1....实现思路 JS 将瀑布列表按高度均为分为指定列数,比如瀑布为 4 列,那么就要把瀑布列表分成 4 个列表 2.

3.8K31

Swift 自定义布局实现瀑布视图

自打 Apple 在 iOS6 中引入 UICollectionView 这个控件之后,越来越多 iOS 开发者选择将它作为构建 UI 首选,如此吸引人原因在于它可定制化程度非常高,非常灵活...] 动态尺寸 有的人会问,瀑布视图惊艳之处就在于它每个 Cell 尺寸都是不一致,那如何生成动态高度 Cell 呢!...了解完需要实现函数后,接下来就开始计算瀑布视图布局属性了,在这里我先讲一下我实现大概思路吧!...由于我们瀑布视图每个 Cell 高度是动态,为了实现这个需求,我们可以声明一个 protocol 并提供一个返回动态高度方法,来为每个 Cell 提供动态高度,代码如下: protocol...: 好了, 利用 UICollectionView 控件与自定义布局实现瀑布内容到此就结束了,最后附上项目的源码地址: https://github.com/ShenJieSuzhou/SwiftScrollBanner

2.2K30

两行css代码实现瀑布,html,css最简单瀑布实现方式且没有缺点!

,余1加入第二个数组 // 最后reduce返回遍历完对象 {0:[1,3,5,7],1:[2,4,6],length:2} // 使用Array.from({0:[1,3,5,7],1:[2,4,6...版本 70.0.3538.102(正式版本) (64 位) 以上代码没有问题,如果你用老版浏览器可能存在兼容问题,就再多加几个重复兼容浏览器属性就行了,如下: -moz-column-count...html代码大致如下: vue语法...这里可以自己实现宽高不一样div,看效果 之前还用flex实现了一个,有坑,一边太长,一边太短,请先大致了解flex,写过demo再往下看,效果图如下: ?...实现方式如下: 一行里面两列,可以控制每列数量相等, 每列里面各自循环,下面伪代码 但是有个坑,如果左边都很高,右边比较矮,就会出现右边空很多内容, 在找解决办法 下面的 指的是 css

1.9K30
领券