UICollectionView布局cell的三种方式
UICollectionViewFlowLayout里面:
// 方法一
- (void)prepareLayout{}
// 方法二:可以修改宽度,不能修改高度
- (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
贴出具体代码,注意方法二,要和一个带bool返回值的方法一块用:
class CoverFlowLayout: UICollectionViewFlowLayout {
// MARK: - 准备布局
override func prepare() {
super.prepare()
scrollDirection = .horizontal
let itemH = (collectionView?.bounds.size.height ?? ) * 0.8
let itemW = itemH
itemSize = CGSize(width: itemW, height: itemH)
minimumLineSpacing =
}
// MARK: - 只要显示的区域发生变化,就重新计算布局
// true - 只要显示的区域发生改变,就让布局失效; -> 重新计算布局,执行下面的方法
override func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
// MARK: - 布局某表Rect中的所有cell
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
// 先获取系统布局好的结果
let oldAttsArray = super.layoutAttributesForElements(in: rect)!
// 创建新集合
var tempArray = [UICollectionViewLayoutAttributes]()
// 遍历集合,进行修改
for oldAtt in oldAttsArray{
// 这里不能直接修改,需先copy(否则控制台会输出错误)
let newAtt = oldAtt.copy() as! UICollectionViewLayoutAttributes
// 屏幕中线位置
let screenCenterX = (collectionView?.bounds.size.width ?? ) * 0.5 + (collectionView?.contentOffset.x ?? )
// cell的中线
let itemCenterX = newAtt.center.x
// 计算距离
let distance = screenCenterX - itemCenterX
// 将距离转换成缩放比例
let scale = - abs(distance) / (collectionView?.bounds.size.width ?? )
let transform = CATransform3DIdentity
newAtt.transform3D = CATransform3DScale(transform, scale, scale, )
tempArray.append(newAtt)
}
return tempArray
}
}
协议方法 UICollectionViewDelegateFlowLayout:
// 方法三:返回cell的size
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == ) { //第0组
return CGSizeMake(collectionView.bounds.size.width, );
} if (indexPath.section == && indexPath.item == ) { //第一组的第0个
return CGSizeMake(collectionView.bounds.size.width, );
} CGFloat width = (collectionView.bounds.size.width - ) / ;
CGFloat height = ;
return CGSizeMake(width, height);
}
UICollectionView布局cell的三种方式的更多相关文章
- 创建cell的三种方式
方式一 注册cell -> 无需为cell绑定标识符 [使用UIViewController完成!] l 1> static NSString * const ID = @"c ...
- Android 生成LayoutInflater的三种方式
通俗的说,inflate就相当于将一个xml中定义的布局找出来. 因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组 ...
- 获得 LayoutInflater 实例的三种方式
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- [转]获得 LayoutInflater 实例的三种方式
转自:http://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 获得 LayoutInflater 实例的三种方式 在实际开 ...
- 【转】实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例
原文网址:http://blog.csdn.net/x605940745/article/details/12099709 实现可扩展展开列ExpandableListView的三种方式 欢迎加入QQ ...
- Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式
Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 到目前为止,大家已经掌握了如何使用过滤器来减少服务器端通过 ...
- 解析Xml文件的三种方式及其特点
解析Xml文件的三种方式 1.Sax解析(simple api for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...
- [转]Asp.net Mvc2中重构View的三种方式
本文转自:http://www.cnblogs.com/zhuqil/archive/2010/07/14/asp-net-mvc2-view-refactoring.html 我们在Asp.net ...
- Python|读、写Excel文件(三种模块三种方式)
python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别: 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pandas进行excel读写: imp ...
随机推荐
- Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- 聊聊从web session的共享到可扩展缓存设计
先从web session的共享说起 许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可 ...
- 用Maven部署war包到远程Tomcat服务器
过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...
- 快速Android开发系列网络篇之Retrofit
Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎 ...
- Android开发学习之路-插件安装、检查应用是否安装解决方案
使用Bmob的时候,如果需要用到支付功能,就需要让应用去安装一个支付插件.而一般的做法是将插件放置在assets目录中,当用户需要支付,先检查是否能支付,不能的话,提示安装插件.代码: public ...
- 游戏服务器菜鸟之C#初探四游戏服务
经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...
- Hadoop的体系结构
HDFS和MapReduce是Hadoop的两大核心.而整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持的,并且它会通过MapReduce来实现对分布式并行任务处理的程序支持. ...
- 了解HTML表单之form元素
前面的话 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input& ...
- 2. Struts2 基础
1. Struts2简介 Struts2是一个WEB端MVC框架.作为比较早的MVC 框架之一,Struts2在使用中还是比较多的.虽然个人感受没有SpringMVC还那么的好用 Struts2 官网 ...
- 2.C#WinForm基础Email分析器
功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...