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 ...
随机推荐
- mono ios莫名其妙闪退的解决方法
使用mono进行ios开发也有一年了,一直有个头疼的问题是闪退,而且闪退的时候并没有抛出明确的错误. 前两天在调试一个bug的时候,在序列化的时候又莫名其妙的闪退,后来在一位大神(博客地址)的指导下, ...
- 让 asp.net 在 mac 上飞
.NET 不跨平台一直饱受争议,虽然微软前端时间放出些消息,要支持.NET跨平台的发展,但是微软一直坚持着不主动.不拒绝.不负责的三不态度,仍然用一种软件帝国的心态,折腾着一些毫无新意的东西.微软想要 ...
- GO 基础(一)
Go语言基础工程目录如下(采用LiteIDE): 备注:需要提前设置GOPATH,即工作目录,bin.pkg.src为默认的GO工程目录结构.GOPATH可以支持多个,在windows下配置在环境变量 ...
- CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总
CSharpGL(38)带初始数据创建Vertex Buffer Object的情形汇总 开始 总的来说,OpenGL应用开发者会遇到为如下三种数据创建Vertex Buffer Object的情形: ...
- C# 深拷贝的具体代码的封装与调用
先封装下实现方法: public class DeepClone { public static object CopyObject(Object obj) { if (obj == null) { ...
- SVN:Previous operation has not finished; run 'cleanup' if it was interrupted
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html cleanup failed to process the following ...
- SQL-从数据类型 varchar 转换为 bigint 时出错的解决方案
解决
- MVC5 网站开发之七 用户功能 1、角色的后台管理
角色是网站中都有的一个功能,用来区分用户的类型.划分用户的权限,这次实现角色列表浏览.角色添加.角色修改和角色删除. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 ...
- android 通讯录实现
最近项目需要,于是自己实现了一个带导航栏的通讯录,上代码! 一.数据准备 (1)bean: public class Friend { private String remark; private S ...
- ASP.NET Core 中文文档 第四章 MVC(3.1)视图概述
原文:Views Overview 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩(Jack) ASP.NET MVC Core 的控制器可以利用 视图 返回格式化结果. 什么 ...