更改集合内的 tableview 标题高度

Posted

技术标签:

【中文标题】更改集合内的 tableview 标题高度【英文标题】:Change tableview header height inside a collection 【发布时间】:2020-03-16 05:53:27 【问题描述】:

如何在UICollectionView 中动态设置UITableView 的标头大小。我之前使用此代码在 UIViewController 中使 UITableView 标头动态化

 override func viewDidLayoutSubviews() 
       super.viewDidLayoutSubviews()
       sizeHeaderToFit()
   

   func sizeHeaderToFit() 
       let headerView = questionTableView.tableHeaderView!

       headerView.setNeedsLayout()
       headerView.layoutIfNeeded()

       let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
       var frame = headerView.frame
       frame.size.height = height
       headerView.frame = frame

       questionTableView.tableHeaderView = headerView
   

但不能在UICollectionViewCell 类中使用此代码。它说“UICollectionViewCell”没有成员viewDidLayoutSubviews

那么我怎样才能在collectionView中制作tableView的动态标题高度。我在故事板的UITableView 中将UIView 拖到顶部(用于标题视图)

【问题讨论】:

您不能在UICollectionViewCell 中使用viewDidLayoutSubviews,因为它是UIViewController 的一部分。 我怎样才能为嵌入在 UICollectionView @PALAKMobileTeamLeader 中的 UItableView 做类似的功能 您是否尝试在 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView 的帮助下制作标题视图? 是的,它会在 uitableview 中创建其他视图?例如:Storyboard 中的标题视图,此委托的标题视图高度,然后显示单元格 如果你分享更多的表格视图代码会更好,这样我可以更好地帮助你。 【参考方案1】:

最重要的信息是您需要在 UICollectionViewCell.swift 文件中调用 UITableViewController 的所有委托和数据源方法。

  var intDynamicHeight = CGFloat()

  func sizeHeaderToFit() -> CGFloat
  
   let headerView = questionTableView.tableHeaderView!

   //headerView.setNeedsLayout()
   //headerView.layoutIfNeeded()

   let height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height

   self.intDynamicHeight = height
  // var frame = headerView.frame
  // frame.size.height = height
  // headerView.frame = frame

  // questionTableView.tableHeaderView = headerView

  return height



  func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat 

    return self.sizeHeaderToFit()



func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

        let headerView = questionTableView.tableHeaderView!
        let viewNewIN = UIView.init(frame: CGRect(x: 0, y: 0, width: <Your desire Width>, height: self.intDynamicHeight))
        headerView.isHidden = false
       var frame = headerView.frame
       frame.size.height = height
       headerView.frame = frame

       viewNewIN.addSubview(headerView)

       return viewNewIN

并在初始阶段隐藏您的标题视图,而不是在viewForHeaderInSection 方法中显示。

【讨论】:

以上是关于更改集合内的 tableview 标题高度的主要内容,如果未能解决你的问题,请参考以下文章

Cell内的TableView动态高度问题

具有动态高度的tableview(每个部分)内的奇怪挑战UIScrollView

UITableViewCell内的UICollectionView如何根据屏幕大小调整tableview单元格高度

在 iPhone 中动态更改 UITableviewCell 高度?

如何在tableview标题中更改uiview的高度

更改 tableview 高度后 CellForRowAt 不调用