Ios 为什么UICollectionView';索引路径处的s cellForItem在开始时为所有单元格调用
为什么UICollectionView的cellForItem在索引路径处会在显示之前为所有单元格调用。collectionView不应该只获取它需要的单元格吗..即。屏幕上显示的单元格(如tableview)会是什么 台阶Ios 为什么UICollectionView';索引路径处的s cellForItem在开始时为所有单元格调用,ios,swift,uitableview,uicollectionview,uicollectionviewcell,Ios,Swift,Uitableview,Uicollectionview,Uicollectionviewcell,为什么UICollectionView的cellForItem在索引路径处会在显示之前为所有单元格调用。collectionView不应该只获取它需要的单元格吗..即。屏幕上显示的单元格(如tableview)会是什么 台阶 带有ViewController的故事板。ViewController具有CollectionView。CollectionView具有垂直流布局 ViewController具有collectionView的IBOutlet,并实现collectionView的数据源和
- 带有ViewController的故事板。ViewController具有CollectionView。CollectionView具有垂直流布局
- ViewController具有collectionView的IBOutlet,并实现collectionView的数据源和委托方法
- 在数据源和委托方法中,单元格(其大小使用autolayout)被传递到collectionview。。索引路径处的项的单元格
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
var flowLayout=collectionView.collectionViewLayout as! UICollectionViewFlowLayout;
flowLayout.estimatedItemSize = CGSize(width:20,height:30);
self.collectionView.register(UINib(nibName:"ShortCell", bundle:nil), forCellWithReuseIdentifier: "ShortCell");
self.collectionView.register(UINib(nibName:"LongCell", bundle:nil), forCellWithReuseIdentifier: "LongCell");
}
}
extension ViewController:UICollectionViewDelegate,UICollectionViewDataSource{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 500;
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let row=indexPath.row;
print("row:",indexPath.row);
let rem = row % 2;
if(rem==0){
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ShortCell", for: indexPath);
return cell;
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "LongCell", for: indexPath);
return cell;
}
}
为什么collectionview需要在显示之前获取所有单元格?为什么它不像tableview那样只以零碎的方式请求单元格?这是个问题吗?经过一点调查 使用
flowLayout.estimatedItemSize
时,自动布局会进行布局传递,以计算在该估计大小下可容纳的单元格数量,而忽略实际单元格中的任何自动大小调整
因此,如果将.estimatedItemSize
更改为实际的估计大小,则应仅根据需要获取调用cellForItemAt
的次数
注意不要高估尺寸。如果你这样做了,你要么最终得到一大堆
未定义UICollectionViewFlowLayout的行为,因为:
项目宽度必须小于UICollectionView的宽度减去部分插入的左侧和右侧值,再减去内容插入的左侧和右侧值
错误消息,或者您得到了愚蠢(不准确)大小的滚动指示器。经过一点调查 使用
flowLayout.estimatedItemSize
时,自动布局会进行布局传递,以计算在该估计大小下可容纳的单元格数量,而忽略实际单元格中的任何自动大小调整
因此,如果将.estimatedItemSize
更改为实际的估计大小,则应仅根据需要获取调用cellForItemAt
的次数
注意不要高估尺寸。如果你这样做了,你要么最终得到一大堆
未定义UICollectionViewFlowLayout的行为,因为:
项目宽度必须小于UICollectionView的宽度减去部分插入的左侧和右侧值,再减去内容插入的左侧和右侧值
错误消息,或者您得到了愚蠢(不准确)大小的滚动指示器。hmmm?我刚刚在一个新的测试视图控制器中运行了您的代码,并且只请求可见和部分可见的单元格。您的单元格是否使用自动布局来确定其大小?我刚刚在外部xib文件中创建了基本单元格,并在不进行编辑的情况下运行了您的代码。hmmm?我刚刚在一个新的测试视图控制器中运行了您的代码,只请求可见和部分可见的单元格。您的单元格大小是否使用autolayout?我刚刚在外部xib文件中创建了基本单元格,并在不进行编辑的情况下运行代码。使我的估计大小接近单元格的实际大小,uicollectionview开始按预期工作,仅在需要时获取单元格!感谢提示:)使我的估计大小接近单元格的实际大小,uicollectionview开始按预期工作,仅在需要时获取单元格!谢谢你的提示:)