Ios 根据scrollview上的内容增加表视图高度
嗨,我想在scrollview上动态增加tableview高度。 我将尝试以下代码,即使它不工作 这里是tableview数据数组Ios 根据scrollview上的内容增加表视图高度,ios,swift,uitableview,uiscrollview,uikit,Ios,Swift,Uitableview,Uiscrollview,Uikit,嗨,我想在scrollview上动态增加tableview高度。 我将尝试以下代码,即使它不工作 这里是tableview数据数组 override func viewDidLoad() { super.viewDidLoad() rewardPointsApi() if(items != nil) { self.tableviewheight.constant = CGFloat(70*items.count) } tableviewhe
override func viewDidLoad() {
super.viewDidLoad()
rewardPointsApi()
if(items != nil) {
self.tableviewheight.constant = CGFloat(70*items.count)
}
tableviewheight.constant = tableview.contentSize.height
}
当前,您正在
rewardPointsApi()
后面的行上方编写代码,如果您正在等待此方法的响应,那么您的逻辑将工作,如果其异步请求,那么您的代码将不工作。
在tableView中重新加载数据之后,您需要添加以下行以响应rewardPointsApi()
tableviewheight.constant = tableview.contentSize.height
从api获得响应后使用以下代码,首先将数据分配到项数组,然后重新加载表视图并设置高度约束为
UItableview
并禁用tableview自滚动查看下面的代码
if(items != nil)
{
DispatchQueue.main.async {
tableView.reloadData()
tableviewheight.constant = tableview.contentSize.height
tableView.isScrollEnabled = false
self.view.layoutIfNeeded()
}
}
有时,使用tableview的内容大小设置常量将无法正确更新高度,因为tableview正在重新加载或自行计算高度 什么地方最好? 如果您有静态数据,那么可能
viewdide
是最佳位置
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
,因此,如果您确定单元格的高度,则直接应用于静态行数
希望它对您和其他面临相同问题的人有所帮助在委托方法中根据表设置约束高度 查看内容大小
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()
您想增加表视图的高度,使其等于其内容,并使用附加的滚动视图处理滚动-为什么?执行一些魔术来实现开箱即用的功能不仅没有意义,而且它也非常低效,而且会消耗内存,因为它基本上放弃了表视图的单元重用机制。它的目的是什么?好的,我同意你的观点,我有一些数据在视图中,沿着scrollview查看我们当时正在做的事情。