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的三种方式的更多相关文章

  1. 创建cell的三种方式

    方式一 注册cell -> 无需为cell绑定标识符 [使用UIViewController完成!] l  1> static NSString * const ID = @"c ...

  2. Android 生成LayoutInflater的三种方式

    通俗的说,inflate就相当于将一个xml中定义的布局找出来. 因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组 ...

  3. 获得 LayoutInflater 实例的三种方式

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  4. [转]获得 LayoutInflater 实例的三种方式

    转自:http://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 获得 LayoutInflater 实例的三种方式   在实际开 ...

  5. 【转】实现展开列ExpandableListView的三种方式之SimpleExpandableListAdapter实例

    原文网址:http://blog.csdn.net/x605940745/article/details/12099709 实现可扩展展开列ExpandableListView的三种方式 欢迎加入QQ ...

  6. Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式

    Hadoop生态圈-注册并加载协处理器(coprocessor)的三种方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 到目前为止,大家已经掌握了如何使用过滤器来减少服务器端通过 ...

  7. 解析Xml文件的三种方式及其特点

    解析Xml文件的三种方式 1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用 ...

  8. [转]Asp.net Mvc2中重构View的三种方式

    本文转自:http://www.cnblogs.com/zhuqil/archive/2010/07/14/asp-net-mvc2-view-refactoring.html 我们在Asp.net ...

  9. Python|读、写Excel文件(三种模块三种方式)

    python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别: 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pandas进行excel读写: imp ...

随机推荐

  1. Merge Sorted Array

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...

  2. 聊聊从web session的共享到可扩展缓存设计

    先从web session的共享说起   许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可 ...

  3. 用Maven部署war包到远程Tomcat服务器

    过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...

  4. 快速Android开发系列网络篇之Retrofit

    Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎 ...

  5. Android开发学习之路-插件安装、检查应用是否安装解决方案

    使用Bmob的时候,如果需要用到支付功能,就需要让应用去安装一个支付插件.而一般的做法是将插件放置在assets目录中,当用户需要支付,先检查是否能支付,不能的话,提示安装插件.代码: public ...

  6. 游戏服务器菜鸟之C#初探四游戏服务

    经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...

  7. Hadoop的体系结构

    HDFS和MapReduce是Hadoop的两大核心.而整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持的,并且它会通过MapReduce来实现对分布式并行任务处理的程序支持. ...

  8. 了解HTML表单之form元素

    前面的话 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input& ...

  9. 2. Struts2 基础

    1. Struts2简介 Struts2是一个WEB端MVC框架.作为比较早的MVC 框架之一,Struts2在使用中还是比较多的.虽然个人感受没有SpringMVC还那么的好用 Struts2 官网 ...

  10. 2.C#WinForm基础Email分析器

    功能:输入Email地址,输出用户名和域名 string[] String.split(params char[] separator)(+5重载)) 返回的字符串数组包含此实例的字符串(由指定Uni ...