Ios 根据scrollview上的内容增加表视图高度

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

嗨,我想在scrollview上动态增加tableview高度。 我将尝试以下代码,即使它不工作

这里是tableview数据数组

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查看我们当时正在做的事情。