uitableview内容大小没有正确快速返回

siv*_*hna 2 uitableview ios contentsize autolayout

我在容器视图中使用uitableview,因此要根据内容大小高度设置容器高度.所以重新加载tableview后我正在改变容器的高度.但它似乎是根据估计的高度计算的.它没有给出实际的高度.

这是我的约束布局.

谢谢..在此输入图像描述

    instructiontableview.estimatedRowHeight = 55

    instructiontableview.rowHeight = UITableViewAutomaticDimension

 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension

  }

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // assigning multiline text to my label 


        cell.layoutIfNeeded()
        cell.sizeToFit()
        return cell
    }
    return UITableViewCell()
}
Run Code Online (Sandbox Code Playgroud)

现在我从容器视图控制器和chnanging高度重新加载

siv*_*hna 10

我试过reloadData()layoutIfNeeded()尝试了许多不同的方法.没有什么对我有用.最后我通过使用解决了它KVO.

这是我的代码

override  func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.instructiontableview.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)

}
override func viewWillDisappear(_ animated: Bool) {
    self.instructiontableview.removeObserver(self, forKeyPath: "contentSize")
    super.viewWillDisappear(true)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?){
    if(keyPath == "contentSize"){

        if let newvalue = change?[.newKey]{
            let newsize  = newvalue as! CGSize
            self.heightofinstructioncontainerview.constant = newsize.height
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

  • 赞美上帝免税。 (3认同)