我子类化UICollectionViewFlowLayout以获取具有分页行为的水平UICollectionView。 只要UICollectionViewCell不是最后一个单元格,它就可以很好地工作。 图片如下。

除了以下内容,我还需要重写UICollectionViewFlowLayout中的内容吗?

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity

{

CGFloat offSetAdjustment = MAXFLOAT;

CGFloat horizontalCenter = (CGFloat) (proposedContentOffset.x + (self.collectionView.bounds.size.width / 2.0));

CGRect targetRect = CGRectMake(proposedContentOffset.x,

0.0,

self.collectionView.bounds.size.width,

self.collectionView.bounds.size.height);

NSArray *array = [self layoutAttributesForElementsInRect:targetRect];

for (UICollectionViewLayoutAttributes *layoutAttributes in array)

{

if(layoutAttributes.representedElementCategory == UICollectionElementCategoryCell)

{

CGFloat itemHorizontalCenter = layoutAttributes.center.x;

if (ABS(itemHorizontalCenter - horizontalCenter) < ABS(offSetAdjustment))

{

offSetAdjustment = itemHorizontalCenter - horizontalCenter;

}

}

}

CGFloat nextOffset = proposedContentOffset.x + offSetAdjustment;

do {

proposedContentOffset.x = nextOffset;

CGFloat deltaX = proposedContentOffset.x - self.collectionView.contentOffset.x;

CGFloat velX = velocity.x;

if(deltaX == 0.0 || velX == 0 || (velX > 0.0 && deltaX > 0.0) || (velX < 0.0 && deltaX < 0.0))

{

break;

}

if(velocity.x > 0.0)

{

nextOffset += [self snapStep];

}

else if(velocity.x < 0.0)

{

nextOffset -= [self snapStep];

}

} while ([self isValidOffset:nextOffset]);

proposedContentOffset.y = 0.0;

return proposedContentOffset;

}

- (BOOL)isValidOffset:(CGFloat)offset

{

return (offset >= [self minContentOffset] && offset <= [self maxContentOffset]);

}

- (CGFloat)minContentOffset

{

return -self.collectionView.contentInset.left;

}

- (CGFloat)maxContentOffset

{

return [self minContentOffset] + self.collectionView.contentSize.width -      self.itemSize.width;

}

- (CGFloat)snapStep

{

return self.itemSize.width + self.minimumLineSpacing;

}

任何指针/注释将很有用。

您可以使用UICollectionViewFlowLayout的UIEdgeInsets sectionInset属性。 请参阅这篇文章。 另请参阅"使用中的Apple文档"部分插图

设置集合视图的框架时,可以在左右两侧设置与填充相同的空间。

要么

您可以在cellForItemAtIndexPath中放置条件,如果它是第一个单元格或最后一个单元格,则相应地管理填充。而已。

要么

您可以设置collectionView的contentInset属性。

例如,

UICollectionView *cv; // your collectionView

cv.contentInset = UIEdgeInsetsMake(0, 5, 0, 5);

另外,您可以在情节提要中设置UICollectionView contentInset使其起作用。

抱歉,在过去30分钟里,我一直在与节插图一起玩,没想到设置UICollectionView本身的插图。

是的,设置contentInset是适合您的情况的好解决方案。 :)

谢谢,这个答案对我有很大帮助

欢迎您@IvanCantarino! :)

contentInset是有意义的,但是如果将其放入最后一个项目并追加另一个项目,则将其放入cellForItemAtIndexPath效果不佳,因为,如果滚动到末尾并添加了新项目,则通常会为new最终项目调用cellForItemAtIndexPath,但不再要求之前的最终商品。或至少不能保证被调用。

不,您不应该在cellForItemAtIndexPath中设置contentinsett,我在回答中也没有这样说!

您可以通过在Interface Builder中更改插图来实现。它们可以在"大小"检查器中作为"部分插入"找到:

对于Swift 5:

在您的viewDidLoad中,像下面这样设置collectionView的contentInset属性:

self.collectionView.contentInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

很简单,您可以使用collectionview方法像下面的方法一样设置UIEdgeInsets。

-(UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

{

return UIEdgeInsetsMake(0,10,0,10); // top, left, bottom, right

}

您可以在此处传递第一个和最后一个单元格的左侧空间和右侧空间的值,也可以通过波纹管方法在两个单元格之间提供最小空间

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {

return 5.0;

}

创建UICollectionViewFlowLayout的实例时,我已经设置了插图。因此它无济于事,minimumInteritemSpacing在这里没有用,因为我在进行水平滚动。您必须在这里使用我已经在做的minimumLineSpacing。

接受的解决方案有效,但是如果您具有pageingEnabled,则收集视图分页将被破坏。

对我来说,解决方案是使用:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

return UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)

}

ios 获取最后一个cell_关于ios:向UICollectionView的第一个和最后一个单元格添加填充...相关推荐

  1. php excel获取合并单元格的内容,并自动向上获取第一个有值的单元格数据

    获取合并单元格的数据 Yii::$enableIncludePath=false;         Yii::import('application.extensions.PHPExcel.PHPEx ...

  2. linux删除最后一个字符串,Bash删除字符串中的第一个和最后一个字符

    问题描述 我有一个这样的字符串: |abcdefg| 我想要得到一个新的字符串(如string2)与原始字符串调用没有两个|在开始和结束时 所以我会有这个 abcdefg 在bash中可能吗? 最佳解 ...

  3. python如何输入多个数据并增加到一个列表里_python 将表格多个列数据放到同一个单元格中...

    反过来 以";"分隔上图F列 结果显示为 卡片1 卡片2 卡片3 的结果 def readExcelDataByName(filename, sheetName): '''读取Ex ...

  4. java jtable 复选框_java swing如何在JTable一个单元格添加多个复选框

    展开全部 java swing中在jTable中添加多个复选框的方32313133353236313431303231363533e59b9ee7ad9431333337616566式如下:impor ...

  5. 一个完美网站的101项指标.第一部分.概述收藏一个完美网站的101项指标第一部分.概述...

    一个完美网站的101项指标 第一部分.概述 前言 世 界上最有趣的职业是网站设计师,有人为自己的作品喊价5000美金,有人129美金就行,而很多人根本看不出这两者的差别,我见过一个加拿大 Freela ...

  6. iOS 获取本地相册图片或视频

    1.先判断iOS 相机相册的权限检测 相关链接 https://www.jianshu.com/p/8a944534e0ee 2.iOS 获取本地相册图片 iOS 获取本地相册图片一 iOS 获取本地 ...

  7. 2.7 实现强大的单元格左右滑动效果并添加功能按钮 [iOS开发中的神兵利器]

    原文:http://coolketang.com/staticCoding/5a995103d50eee2ea30512f9.html 1. 您将在本节课对单元格进行扩展,当鼠标在单元格左右滑动时,弹 ...

  8. iOS:多个单元格的删除(方法二):

    前面介绍了万无一失的方法一,这里介绍删除单元格的第二种方式,通过删除单元格中的内容的方式进行操作:(但是这种情况有一个小的弊端,由于单元格重用机制,如果单元格内容一样时,标记的存在会造成误删) 删除前 ...

  9. python如何获取多个excel单元格的值

    一. 获取多个单元格的值报错:AttributeError: 'tuple' object has no attribute 'value' 需要读取的sample.xlsx 代码读取的是A3:B10 ...

最新文章

  1. nginx-ingress 配置https,同支持http
  2. SAP Link Between Material Document and Accounting Document Table
  3. numpy比较运算符和其对应的通用函数
  4. Windows下一个curl使用
  5. 06-typeAliases标签和package标签
  6. linux里hba状态_在Linux/Unix平台查看HBA卡的WWN号 和状态
  7. GDCM:Patch File的测试程序
  8. linux下php支持mysql_linux下php扩展mysqli的支持 .
  9. python 字典默认会引用 除非深拷贝
  10. 51NOD-1005 大数加法【大数】
  11. mysql游标是什么特性_[转]MySQL游标特性
  12. hfss和python接口_python 与HFSS联合仿真的教程讲解
  13. 提高笔记本无线网络速度
  14. 2、传输介质——双绞线
  15. 前端程序员未来如何发展?
  16. Ubuntu 14.04.2安装内核源码树以及编译
  17. Learning Texture Transformer Network for Image Super-Resolution(全译文+大量名词链接)读论文记录①
  18. hnu数电实验(最终)Verilog各个模块代码(波形后续更新。。。)
  19. matlab的各种数据读取(txt,dat,mat等格式)
  20. 假如开源项目创始人去世了,项目怎么办? - 知乎精华

热门文章

  1. ab flash player 8_FLASH 质子治疗的技术挑战
  2. 他从零开始学Python,25岁拥有480000粉丝:成功就靠这3点!
  3. HDLBits答案(24)_由波形图描述电路
  4. 关于使用两个GTP/GTX出现[DRC RTSTAT-1]error([route 35-54] critical warning)的问题详解
  5. Linux下make使用gcc编译,Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)
  6. python3.7安装包百度云_Python-3.7.0软件安装包以及安装教程
  7. mysql inodb主键bug_MySQL的这个bug,坑了多少人?
  8. openmp并行编程_OpenMP实现生产者消费者问题
  9. tomcat的wget链接_Linux(jdk安装tomcat安装nginx安装gcc/wget)
  10. python从oracle提取数据库_[python] python 和远程oracle 数据库连接,select提取文件 环境搭建过程...