如何在UICollectionView上创建混合静态和动态行?

时间:2016-12-22 15:11:09

标签: uitableview uicollectionview swift3 xcode8.2

我正在开发一款应用。我需要在UIViewCollection中创建混合的静态和动态行。我需要用静态UIImage和UILabel填充第一行和第二行。然后应该从第3行开始动态内容。怎么做?

我正在使用没有Storyboard的Swift 3以编程方式创建它。

My App

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您希望使用静态单元格的原因是因为这些单元格上的用户界面将始终相同。此外,您希望单元格之间没有分隔符。

我建议将UIView置于UICollectionView之上,而不是为此目的引入静态单元格。您可以绘制UIView以模仿单元格的外观,这也可以解决在静态单元格之间没有分隔符的问题"。

另一个原因,为什么UIView会更好,因为你不会弄乱你的数据源,尤其是IndexPath时。

最后,UI真的看起来像什么,可以用UITableView解决什么。是否有特殊原因,为什么你使用UICollectionView

修改 如果您使用的是UITableView,则只需将此视图分配到tableViewtableHeaderView中的viewDidLayoutSubviews viewWillAppear媒体资源。

示例:

// Create headerView from Nib 
// Make sure you override the init() function, so it will read it from xib
let headerView = YourHeaderView()

// Set the width to be equal to your tableView's width, and set the height according to how height it is in your xib files
headerView.frame =  CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 200)

// UITableView has a tableViewHeader property. just assign the view to it
self.tableView.tableViewHeader = headerView

答案 1 :(得分:0)

尝试以下代码行:

 override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
      return 1
    }

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

    //assuming, arrLabelDynamic.count = arrImageDynamic.count and arrLabelStatic.count = arrImageStatic.count

        return arrImageDynamic.count + arrImageStatic.count
    }
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath:NSIndexPath)->UICollectionViewCell
        {
           var  cell = collectionView.dequeueReusableCellWithReuseIdentifier("CELL", forIndexPath: indexPath) as CollectionCell

        // if my cell is 3rd or greater then 3.
            if ( indexPath.row > 1 )    {
            cell.imageView.image = [UIImage imageNamed: arrImageDynamic[indexPath.row - 2]] ;
            cell.myLabel.text= [UIImage imageNamed: arrLabelDynamic[indexPath.row - 2]] ;
             }
       //if cell is first and second.
        else{
            cell.imageView.image = [UIImage imageNamed: arrImageStatic[indexPath.row ]] ;
            cell.myLabel.text= [UIImage imageNamed: arrLabelStatic[indexPath.row]] ;
             }
         return cell
        }

如果您正在使用表格视图,请在其委托中对tableview执行相同操作。 为静态和动态制作两个不同的阵列易于维护。你可以做的事情比较少:

  1. 添加静态数据是Mutable数组,然后将动态数据添加到同一个数组中。 (最简单的解决方案,但是您必须注意数据不会随机播放或编辑的数组。再次,您希望使用这些可变数组使用removeAllObject,否则您将复制数据。)

  2. 您可以维护标签和图像的字典等等。它完全取决于您如何理解问题,您的要求以及如何管理事物。