根据滚动视图上的内容增加表格视图高度
Posted
技术标签:
【中文标题】根据滚动视图上的内容增加表格视图高度【英文标题】:Increase table view height based on content on scrollview 【发布时间】:2019-03-06 15:36:07 【问题描述】:您好,我想在滚动视图上动态增加表格视图高度。 我会尝试下面的代码,即使它也不起作用
这里的items是tableview数据数组
override func viewDidLoad()
super.viewDidLoad()
rewardPointsApi()
if(items != nil)
self.tableviewheight.constant = CGFloat(70*items.count)
tableviewheight.constant = tableview.contentSize.height
【问题讨论】:
您想增加表格视图的高度以使其等于其内容,并使用附加滚动视图处理滚动 - 为什么?执行一些魔术来实现开箱即用的功能不仅没有意义,而且由于它基本上丢弃了表格视图的单元格重用机制,因此它也非常低效和消耗内存。它的目的是什么? 好的,我同意你的观点,我在当时我们正在做的事情上沿着滚动视图查看了一些数据。 【参考方案1】:有时使用 tableview 的内容大小设置常量不会正确更新高度,因为 tableview 正在重新加载或自行计算
最好的地方是什么?
如果你有静态数据,那么viewDidAppear
可能是最好的地方
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(animated)
self.view.layoutIfNeeded()
self.heightConstraint.constant = self.tableView.contentSize.height
self.view.layoutIfNeeded()
如果您的数据是动态的,例如调用 API。然后在主队列内的响应块内。
DispatchQueue.main.async
self.tableView.reloadData()
self.view.layoutIfNeeded()
self.heightConstraint.constant = self.tableView.contentSize.height
self.view.layoutIfNeeded()
重要提示:与内容大小直接相关的因素是estimateRowHeight
因此,如果您确定单元格的高度,那么您可以在静态行数的情况下直接应用
希望它对您和面临同样问题的其他人有所帮助
【讨论】:
【参考方案2】:在得到 api 响应后使用以下代码,首先将数据分配给 item 数组,然后重新加载表视图并设置高度约束 UItableview
并禁用 tableview 自滚动参见下面的代码。
if(items != nil)
DispatchQueue.main.async
tableView.reloadData()
tableviewheight.constant = tableview.contentSize.height
tableView.isScrollEnabled = false
self.view.layoutIfNeeded()
【讨论】:
【参考方案3】:目前,您在rewardPointsApi()
之后立即在上面写代码,如果您正在等待对此方法的响应,如果它的异步请求您的代码将不起作用,那么您的逻辑将起作用。
在 tableView 中重新加载数据后,您需要添加以下行以响应 rewardPointsApi()
。
tableviewheight.constant = tableview.contentSize.height
【讨论】:
【参考方案4】:在委托方法中根据表格设置约束高度 查看内容大小
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
self.constraint_height.constant = self.tblview.contentSize.height
在获取 api 响应时,如果需要,重新加载并查看布局
self.tblview.reloadData()
self.view.layoutIfNeeded()
self.constraint_height.constant = self.tblview.contentSize.height
self.view.layoutIfNeeded()
【讨论】:
以上是关于根据滚动视图上的内容增加表格视图高度的主要内容,如果未能解决你的问题,请参考以下文章