ios - UICollectionView 不要重用 Cell

标签 ios swift

我的 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
        }

你还可以看到输出:

CollectionView Image

我已经为 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/

相关文章:

iphone - 在 UITabbar 项之间插入空格/ View /图像

ios - 自定义 UILabel 在 Interface Builder 中显示不正确

ios - 使用委托(delegate) Swift 选择项目后 TableView 单元格未更新

ios - AVPlayerViewController 问题

ios - 无法在 iOS8 自定义键盘中获得正确的约束

ios - 为什么我在关闭 View Controller 后无法显示我的 Facebook 插页式广告?

ios - 在 UIImagePickerController 中强制横向

ios - UIMarkupTextPrintFormatter 打印额外的空白页

ios - Alamofire 网络事件指示器未显示

swift - 如何让两个或多个 UIView 动画 block 同时运行?