继续问:为什么获得高度的代理方法中第二个参数传递indexPath.item

继续问:为什么获得高度的代理方法中第二个参数传递indexPath.item

上次的问题:

对于MyCollectionViewLayout.m中获得高度的代理方法,如下:

CGFloat h = [self.delegate getCellHeight:width index:(int)indexPath.item];

为什么第二个参数传递indexPath.item而千万不能用indexPath.row?

继续问:

我把瀑布流案例中所有的indexPath.item都换成indexPath.row,运行结果一样,是不是Xcode9的UICollectionView中,indexPath.item和indexPath.row是一样的?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

UITableView的一个单元是一个cell就是一整行row,而UICollectionView的一个单元格就是独自的小区域一个item,如果每个item的高度都一样,设置一行的高度也就是item的高度也可以,但是如果想单独设置一个单元格的高度,也就是item的高度,是不是就需要设置单独的item的高度。例如,UITableView中每个row的高度可能是不同的,那么UICollectionView中是不是也可能每个item的高度也不同,那就需要去单独设置每个item的高度啊。

Bger 2017-12-14 22:37:55

有时候助教的回答真是让人看了气愤..  太多套路式的回答了.

google下就会发现

Inside NSIndexPath, the indexes are stored in a simple c array called "_indexes" defined as NSUInteger* and the length of the array is stored in "_length" defined as NSUInteger. The accessor "section" is an alias to "_indexes[0]" and both "item" and "row" are aliases to "_indexes[1]". Thus the two are functionally identical.


In terms of programming style – and perhaps the definition chain – you would be better using "row" in the context of tables, and "item" in the context of collections.


追寻这样的习惯是增加代码的可读性.. 实际上这.row和.item是一样使用,并不会报错..


  • 嗯嗯,你找到的这个并没有错,也很好的解释了一般在UITableView中使用row,UICollectionView中使用item。我在回复中也说了如果高度一样的时候item和row都是可以的。只是当在瀑布流布局中因为每个Item的高度都是不同的嘛,所以这个时候使用item去设置每个单元的高度会更好啊。
    2017-12-15 11:45:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS进阶:界面优化与数据存储
  • 参与学习       516    人
  • 提交作业       158    份
  • 解答问题       637    个

本路径采用基础+案例方式,助你解开对界面优化、数据储存、屏幕适配的疑惑。6小时团购项目实战加最新版本Swift讲解,让你掌握更多iOS开发技巧。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师