我有一个UIStackView
,我添加了UIButton
和UITableView
作为subviews
。最初因为表视图没有内容,所以它的高度为零。
当用户采取行动时,UItableView
会收到一些数据并重新加载。
在numberOfRowsInSection
我返回计数,但由于UITableView
的高度为零,因此调用cellForRowAt
无效。
我想在没有内容时保持UITableView
的高度为零,并在内容存在时给它高度。
由于UITableView
是UIStackView
的子视图,它也应该扩展
我怎样才能实现它?
一旦接收到数据,您就可以调整tableview的框架。检查此链接:UITableView not shown inside UIStackView
嘿,我做了一些与此非常相似的事情,希望这会有所帮助。
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
}
希望这有助于:)