如何根据表格行设置动态表格高度?

时间:2019-11-28 12:42:21

标签: ios swift uitableview uiscrollview row-height

我在运行时遇到桌子高度问题。

我在我的超级视图中添加了滚动视图。在Scroll View上方,我在顶部添加了一个UIView,然后在UIView之后放置了一个UITableView(scrollEnabled为false),并再次在UITableView的底部添加了UIView。

问题:我希望用户在屏幕上进行一次滚动,因此我禁用了表视图滚动属性。现在我的问题是我正在从服务器获取表数组数据,因此从服务器获取数据后,在编写表高度逻辑的位置未调用我的viewDidLayoutSubviews方法。当我重新加载相同的屏幕时,一切工作正常。

这是我的代码:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if devicesArray.count != 0{
            viewDeviceList.frame = CGRect(x: viewDeviceList.frame.origin.x, y: viewDeviceList.frame.origin.y, width: viewDeviceList.frame.size.width, height: tableDeviceList.contentSize.height)

            tableDeviceList.reloadData()
        }

    }

有人可以建议我这样做吗?谢谢。

2 个答案:

答案 0 :(得分:1)

请尝试使用以下代码,并让我知道。我正在与观察者一起工作,并且它工作得很好。

//MARK:- Add this observer into your View/Controlloer
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            self.transactionTableViewHeightConstraints.constant = transactionTableView.contentSize.height
        }
//MARK:- Fetch TableListData
    func updateTableViewHeightAfterAPICall(){
            self.transactionTableView.addObserver(self, forKeyPath: "contentSize", options: [], context: nil)
            self.transactionTableView.reloadData()
            UIView.animate(withDuration: 0.5) {
                self.view.layoutIfNeeded()
            }
        }

答案 1 :(得分:1)

像这样为tableView高度约束创建出口

@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!

添加此行

self.tableView.reloadData()
self.tableViewHeightConstraint.constant = self.tableView.contentSize.height