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. Mono下的WCF的Bug?

    最近一段时间,一直在折腾Mono,折腾Linux.让我无比痛苦的是Mono下的WCF的坑真的是太多了,这不又遇到了一个莫名其妙的问题. 环境:mono 3.2.1,Jexus 5.4.3,OS Cen ...

  2. 集成基于CAS协议的单点登陆

    相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...

  3. C#对WebApi数据操作

    目标 简化并统一程序获取WebApi对应实体数据的过程,方便对实体进行扩充.原理就是数据服务使用反射发现数据提供者,处理好泛型就行. 相关传送门:Restful WebApi开发实践 先来看下最后的请 ...

  4. SSH框架整合(代码加文字解释)

    一.创建数据库并设置编码. A) create database oa default character set utf8. 二.MyEclipse工程 A) 在Myeclipse里创建web工程, ...

  5. [转]Linux下g++编译与使用静态库(.a)和动态库(.os) (+修正与解释)

    在windows环境下,我们通常在IDE如VS的工程中开发C++项目,对于生成和使用静态库(*.lib)与动态库(*.dll)可能都已经比较熟悉,但是,在linux环境下,则是另一套模式,对应的静态库 ...

  6. java调用CXF WebService接口的两种方式

    通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了. 2.静态调用 // 创建WebService客户端代理工厂 ...

  7. JS作用域面试题总结

    关于JS作用域问题,是面试的时候面试官乐此不疲的面试题,有时候确实是令人抓狂,今天看到一个讲解这个问题的视频,明白了那些所谓的“原理”顿时有种豁然开朗的感觉~~~ 1.js作用域(全局变量,局部变量) ...

  8. 日常css技巧小结(1)--背景透明度改变对内容无影响

    刚开始出现的错误,内容会受到背景透明度改变的影响:如图: 代码: <!DOCTYPE html> <html lang="en"> <head> ...

  9. 解决手机浏览器上input 输入框导致页面放大的问题(记录)

    在微信手机页面开发当中,页面是没有问题的,但是当焦点在input输入框的时候,手机页面会自动放大. 加入以下代码在head 区,可解决此问题 <meta name="viewport& ...

  10. 通过Http接口及SolrNet 两种方法基于Solr5.5.1 实现CURD

    前言 老规矩,任何技术的入门我通常都会总结增删改查,本文我就通过HttpWebRequest和SolrNet的方式实现Solr最基础的增删改查(CURD).对于自己的完整项目,同时不想过于依赖第三方类 ...