根据ScrollView上的内容增加表观高度



嗨,我想在scrollview上动态增加tableview高度。我将尝试以下代码也无法正常工作

这里的项目是tableview数据数组

override func viewDidLoad() {
    super.viewDidLoad()
    rewardPointsApi()
    if(items != nil) {
        self.tableviewheight.constant = CGFloat(70*items.count)
    }
    tableviewheight.constant = tableview.contentSize.height
}

有时设置带有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,因此,如果您确定单元格的高度,则直接在静态行数时直接应用

希望这对您和面临同一问题的其他人有帮助

在从API 获得响应后,使用以下代码,首先将数据分配给项目数组,然后重新加载表视图并设置UItableview的高度约束并禁用tableView自滚动查看以下代码。

if(items != nil)
{
     DispatchQueue.main.async {
         tableView.reloadData()
         tableviewheight.constant = tableview.contentSize.height
         tableView.isScrollEnabled = false
         self.view.layoutIfNeeded()
     }
 }

当前您在rewardPointsApi()之后立即上方写作,如果您正在等待此方法的响应,则您的逻辑将有效,如果其异步请求您的代码不起作用。您需要在重新加载数据后立即添加rewardPointsApi()的响应中的以下行。

        tableviewheight.constant = tableview.contentSize.height

在委托方法集合中,约束的高度查看内容大小

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    self.constraint_height.constant = self.tblview.contentSize.height
}

重新加载后,如果需要时,请在需要时查看布局

 self.tblview.reloadData()
 self.view.layoutIfNeeded()
 self.constraint_height.constant = self.tblview.contentSize.height
 self.view.layoutIfNeeded()

最新更新