UITableView tableHeaderView 高度计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableView tableHeaderView 高度计算相关的知识,希望对你有一定的参考价值。
参考技术A 在headerview采用的是autolayout布局的方式下,怎么去动态设置headerview的高度?可使用如下方法:
systemLayoutSizeFittingSize ,它是UIView的方法,使用它的前提是需要展示内容的控件必须约束完美,接受一个CGSize,目前使用系统提供的Fitting Size即可
使 UItableview 单元格高度等于它的子 UItableview
【中文标题】使 UItableview 单元格高度等于它的子 UItableview【英文标题】:Make UItableview cell height equal to it's child UItableview 【发布时间】:2017-09-20 17:51:31 【问题描述】:我有一个包含 UItableview 的 UItableview 单元格,我需要使该单元格的高度等于它的子 UItableview 的高度。 下图说明了我需要做什么。
【问题讨论】:
@Larme 我不需要在 subtableView 中滚动。你建议什么来实现我的需要? 在我看来,您根本不需要在 tableview 中嵌套 tableview。我会将“Main Cellx”实现为标题,将“Sub Cellx”实现为单元格。 @FryAnEgg 我是初学者,你能告诉我怎么做吗,你能给我一个例子吗? 是的,我可以帮你。我可能需要几个小时才能回到我的示例代码。敬请期待。 【参考方案1】:首先看看我的 ViewController,它有一个 tableview(tblview) 和 UITableViewCell(CustomTableViewCell),
class ViewController: UIViewController
@IBOutlet var tblview:UITableView!
override func viewDidLoad()
super.viewDidLoad()
self.tblview.delegate = self
self.tblview.dataSource = self
// Do any additional setup after loading the view, typically from a nib.
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
extension ViewController:UITableViewDelegate,UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.identifier) as! CustomTableViewCell
return cell
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
然后看看我的CustomTableViewCell,它有一个表格视图和一个单元格中的一个标签。看,
class CustomTableViewCell: UITableViewCell
static let identifier = "CustomTableViewCell"
@IBOutlet var tblviewCell:UITableView!
override func awakeFromNib()
super.awakeFromNib()
// Initialization code
self.tblviewCell.delegate = self
self.tblviewCell.dataSource = self
tblviewCell.isScrollEnabled = false
override func setSelected(_ selected: Bool, animated: Bool)
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize
let heighToReturn = self.tblviewCell.contentSize.height + 20 // upper and down space
return CGSize(width: self.tblviewCell.contentSize.width, height: heighToReturn)
extension CustomTableViewCell:UITableViewDelegate,UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return 5
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: customCell.identifier) as! customCell
cell.lblname?.text = "Vikas"
return cell
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 80
class customCell: UITableViewCell
static let identifier = "customCell"
@IBOutlet weak var lblname :UILabel?
所以,如果你在 systemLayoutSizeFitting 方法中给 tableview 内容大小高度,那么问题就解决了。
我希望这会有所帮助。
【讨论】:
【参考方案2】:以下是表格标题单元格的制作方法。该单元需要在情节提要中进行原型设计并进行子类化(如果需要配置)。然后覆盖表视图委托中的以下函数。或者,您可以动态生成视图并从 viewForHeaderInSection 返回。
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
return 150
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
let headerCell = tableView.dequeueReusableCell(withIdentifier: "ConferenceHeaderCell") as! ConferenceDetailHeaderCell
// configure cell
return headerCell
对于细胞本身,非常相似:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "ConferenceUserCell", for: indexPath) as! ConferenceDetail_TVCell
// Configure the cell...
return cell
根据具体情况,您可以实施“heightForRowAtIndexPath”
【讨论】:
以上是关于UITableView tableHeaderView 高度计算的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何在导航栏中与 NavigationBar Title 平行放置一个按钮?