我的 UIViewController 中有一个 UICollectionview。在滚动 Collection View 上不重用单元格。可以看到numberOfItemsInSection方法;
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 7
}
这是collectionViewLayout方法;
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
if(collectionView == mainCollectionView){
switch(indexPath.row){
case 0:
return CGSize(width: self.view.frame.width, height: self.view.frame.height * 0.20)
case 1:
return CGSize(width: (self.view.frame.width * 0.5) - 3, height: self.view.frame.height * 0.2)
case 2:
return CGSize(width: (self.view.frame.width * 0.5), height: self.view.frame.height * 0.2)
case 3:
return CGSize(width: self.view.frame.width, height: self.view.frame.height * 0.2)
case 4:
return CGSize(width: (self.view.frame.width * 0.6) - 3, height: self.view.frame.height * 0.2)
case 5:
return CGSize(width: (self.view.frame.width * 0.4), height: self.view.frame.height * 0.2)
case 6:
return CGSize(width: (self.view.frame.width), height: self.view.frame.height * 0.2)
default:
return CGSize(width: 0, height: 0)
}
}
}
最后一个是cellForRowAtIndexPath方法:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if(collectionView == mainCollectionView){
var cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MainCollectionViewCell
switch(indexPath.row){
case 0:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = true
cell.placeLabel.hidden = true
cell.lineView.hidden = false
case 1:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = true
cell.placeLabel.hidden = true
cell.lineView.hidden = false
case 2:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = false
cell.placeLabel.hidden = true
cell.lineView.hidden = false
case 3:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = true
cell.placeLabel.hidden = true
case 4:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = true
cell.placeLabel.hidden = true
cell.lineView.hidden = false
case 5:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = false
cell.placeLabel.hidden = true
cell.lineView.hidden = false
case 6:
cell.imageView.image = UIImage(named: imageArray[indexPath.row])
cell.clockIconImageView.hidden = true
cell.pinIconImageView.hidden = true
cell.placeLabel.hidden = true
cell.lineView.hidden = false
default:
break
}
return cell
}
你还可以看到输出:
我已经为 case6 机器人添加了一个断点,它没有进入那个案例。任何帮助都会很棒。
最佳答案
我不认为像这样处理每个案例是个好主意。
您应该创建一个包含单元格参数的包装器对象。
在您的情况下,它应该类似于以下内容:
class YourWrapperObject {
var image: UIImage
var clockIconHidden: Bool
var size: CGSize
// Your other vars
}
创建这些对象的数组(例如,在您的 viewDidLoad
方法中),然后在您的 cellForRowAtIndexPath
方法中:
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var cell = /*get your cell using reusable identifier*/
let cellParameters = yourObjectArray[indexPath.row]
/* Then assign each parameters */
cell.imageView.image = cellParameters.image
cell.clockIconImageView.hidden = cellParameters.clockIconHidden
cell.pinIconImageView.hidden = cellParameters.pinIconHidden
cell.placeLabel.hidden = cellParameters.placeHidden
cell.lineView.hidden = cellParameters.lineHidden
/* return your cell */
return cell
}
以及在您的 sizeForItemAtIndexPath
方法中:
return yourObjectArray[indexPath.row].size
您的代码将更具可读性和灵 active
关于ios - UICollectionView 不要重用 Cell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297458/