UITableViewCell 中的 UICollectionView?

Posted

技术标签:

【中文标题】UITableViewCell 中的 UICollectionView?【英文标题】:UICollectionView in UITableViewCell? 【发布时间】:2016-06-01 01:22:38 【问题描述】:

我必须构建一个自定义 UITableViewCell,但我不确定如何处理内容。指定的设计如下所示:

标签和边框什么的我都整理好了,但是考虑到内容是动态的,我不知道用什么来组织里面。

我已阅读有关 FlowLayout 的信息,但我不确定如何使用它,以及有关 UICollectionView 的信息,但集合视图所能提供的只是单元格内的水平滚动,这是一个不适合的功能我的需求。

你能给我一些关于如何实现这一点的建议吗?

【问题讨论】:

【参考方案1】:

这是一个非常基本的 UICollectionView 实现,使用动态单元格大小。

class CollectionViewController: UICollectionViewController 

  @IBOutlet var myCollectionView: UICollectionView!

  let tags = [
    "Web Design",
    "ADWE",
    "Busisness functions",
    "Comics",
    "Web",
    "News in the Middle East",
    "Albanian",
    "Possession of machetes",
    "Nuclear physics",
    "Cookery",
    "Cross stitiching"
  ]

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

  override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return tags.count

  

  override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("dynamicCell", forIndexPath: indexPath)
    cell.layer.borderColor = UIColor.grayColor().CGColor
    cell.layer.borderWidth = 1.0
    cell.layer.cornerRadius = cell.frame.height / 2.0
    let tagLabel = cell.viewWithTag(100) as? UILabel
    tagLabel?.text = tags[indexPath.row]
    return cell
  



extension CollectionViewController: UICollectionViewDelegateFlowLayout 
  func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 

    let tagLabel = UILabel()
    tagLabel.text = tags[indexPath.row]
    let size = tagLabel.intrinsicContentSize()
    let cellSize = CGSizeMake(size.width + 40, size.height + 20)  //added 40 to width to add space around label.

    return cellSize

  

您必须根据需要在 sizeForItemAtIndexPath 方法中清理格式。

希望这会有所帮助!

【讨论】:

如果标签的顺序不重要的话,多想想这个,我会写一个排序函数来优化布局(并且可能做充分的理由)。

以上是关于UITableViewCell 中的 UICollectionView?的主要内容,如果未能解决你的问题,请参考以下文章

collectionView:didSelectItemAtIndexPath:没有被调用

UITableViewCell 中的 UIDatePicker 更新 UITableViewCell 文本标签

更改 UITableViewCell 中的对象也更改了重用 UITableViewCell 的对象

确定 UITableViewCell 中的 UIButton

UITableViewCell 事件中的 UIButton 不起作用

UITableViewCell 中的 UICollectionView