我目前正在开发一个应用程序。我需要在 UIViewCollection 中创建混合的静态和动态行。我需要用静态 UIImage 和 UILabel 填充第一行和第二行。然后动态内容应该从第 3 行开始。怎么做?
我正在使用没有 Storyboard 的 Swift 3 以编程方式创建这个。
任何帮助,将不胜感激!
我目前正在开发一个应用程序。我需要在 UIViewCollection 中创建混合的静态和动态行。我需要用静态 UIImage 和 UILabel 填充第一行和第二行。然后动态内容应该从第 3 行开始。怎么做?
我正在使用没有 Storyboard 的 Swift 3 以编程方式创建这个。
任何帮助,将不胜感激!
试试下面的代码行:
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,请在其代表中对 tableview 执行相同操作。为静态和动态制作两个不同的数组很容易维护。您可以使用更多几种方法,例如:
添加静态数据是可变数组,然后将动态数据添加到同一个数组中。(最简单的解决方案,但是您必须注意数据不会随机播放或编辑的数组。再次,您想使用这些可变数组removeAllObject
,否则您将复制数据。)
您可以维护标签和图像的字典,等等。这一切都与您如何理解问题,您的需求以及您如何管理事物有关。
您之所以要使用静态单元格,是因为这些单元格上的用户界面将始终相同。此外,您希望在单元格之间没有分隔符。
我宁愿建议将其放置UIView
在UICollectionView
, 而不是为此目的引入静态单元格。您可以绘制UIView
模仿单元格的外观,这也可以解决“静态单元格”之间没有分隔符的问题。
另一个原因,为什么 aUIView
会是一个更好的方法,因为你不会弄乱你的数据源,尤其是当涉及到IndexPath
's.
最后一件事,UI 看起来真的很像,可以用UITableView
. 有什么特别的原因,你为什么要使用UICollectionView
?
编辑:
如果您正在使用UITableView
,您可以将此视图分配给in或 intableView
的tableHeaderView
属性。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