У меня есть экран, который состоит из двух элементов (UIView
и UITableView
). Когда пользователь прокручивает экран, я хочу UIView
выйти из экрана (вверху) и UITableView
начать прокручивать. Я даю фиксированную высоту для UIView
и фиксированную высоту для UITableViewCells
'. Кроме того, я устанавливаю нижний и верхний якоря, но UITableView
не показывает, если я не задаю конкретную высоту UITableView
. Если я приведу конкретную высоту для UITableView
, то просто покажу не все ячейки.
Кроме того: Сначала tableView пуст, поскольку его источник данных пуст. Когда пользователь нажимает кнопку внутри UIView, источник данных выполняет и данные таблицы обновляются.
У меня есть несколько постов, но все они говорят, что дают фиксированную высоту для UITableView. Я не знаю, как показать все клетки с фиксированной высотой.
Например:
Динамическая высота TableView в виде прокрутки
Якоря:
boxView.anchor(self.view.topAnchor, left: self.view.leftAnchor, bottom: nil, right: self.view.rightAnchor, topConstant: 20, leftConstant: 10, bottomConstant: 0, rightConstant: 10, widthConstant: 0, heightConstant: 240)
sTableView.anchor(self.boxView.bottomAnchor, left: self.view.leftAnchor, bottom: self.scrollView.bottomAnchor, right: self.view.rightAnchor, topConstant: 0, leftConstant: 0, bottomConstant: 0, rightConstant: 0, widthConstant: 0, heightConstant: 100)
Как я объявляю UITableView:
let sTableView = UITableView()
var dataSource: [SupportedService]?
let scrollView = UIScrollView()
viewDidLoad(){
sTableView.delegate = self
sTableView.dataSource = self
sTableView.register(BaseCell.self, forCellReuseIdentifier:"supportedServicesCell")
sTableView.tableFooterView = UIView()
sTableView.isScrollEnabled = false
self.scrollView.addSubview(sTableView)
self.view.addSubview(scrollView)
}
@objc func buttonTapped(_ sender: UIButton){
//Do Some Network Requests Here (Data is temp)
dataSource = DATA
sTableView.reloadData()
}
Функции TableView:
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let data = dataSource{
return data.count
}else{
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "supportedServicesCell", for: indexPath) as! BaseCell
guard let data = dataSource else { return cell }
cell.textLabel?.text = data[indexPath.row].title
return cell
}
Как я хочу это перед прокруткой:
После прокрутки: