UITableView高度问题

问题描述 投票:0回答:2

我有一个UIStackView,我添加了UIButtonUITableView作为subviews。最初因为表视图没有内容,所以它的高度为零。

当用户采取行动时,UItableView会收到一些数据并重新加载。

numberOfRowsInSection我返回计数,但由于UITableView的高度为零,因此调用cellForRowAt无效。

我想在没有内容时保持UITableView的高度为零,并在内容存在时给它高度。

由于UITableViewUIStackView的子视图,它也应该扩展

我怎样才能实现它?

ios swift uitableview autolayout uistackview
2个回答
0
投票

一旦接收到数据,您就可以调整tableview的框架。检查此链接:UITableView not shown inside UIStackView


0
投票

嘿,我做了一些与此非常相似的事情,希望这会有所帮助。

final class SignInVC: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var tableViewHeight: NSLayoutConstraint!

    // Whatever max height you are after
    private let maxTableViewHeight = 500
    // Whatever height you are after
    private let rowHeight = 90

    // Just using string array for example but use your own array here
    private var fields: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
        setTableViewHeight()
    }

    private func setTableViewHeight() {
        var newHeight = fields.count * rowHeight
        if newHeight > maxTableViewHeight {
            newHeight = maxTableViewHeight
        }
        tableViewHeight.constant = newHeight
    }

    @IBAction func addField(_ sender: Any) {
        fields.append("Test")
        setTableViewHeight()
        tableView.reloadData()
    }

}

extension SignInVC: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return fields.count
    }

    // Rest of your datasource/delegate below...
    // I am assuming you have your own already

}

希望这有助于:)

© www.soinside.com 2019 - 2024. All rights reserved.