为什么我的 TableView 没有显示任何内容?
Why is my TableView not showing any content?
我创建了一个简单的 TableView,它从 Firestore 获取国家/地区列表。
网络请求工作正常,我不怀疑有任何问题。
所有变量都已填充。
控制台中没有显示错误。
但是我的 TableView 仍然是空的,没有出现在 UI.
中
有人可以看出下面代码中的任何明显错误吗?
import UIKit
class MainViewController: UIViewController {
[@IBOutlets...]
var countryList: [Country] = []
override func viewDidLoad() {
super.viewDidLoad()
countriesTableView.delegate = self
countriesTableView.dataSource = self
countriesTableView.register(UINib(nibName: "CountriesCell", bundle: nil), forCellReuseIdentifier: "CountriesCell")
getCountries()
}
func getCountries (){
NetworkManager.shared.getCountryList { success in
if success {
self.countryList = NetworkManager.shared.data!
self.countriesTableView.reloadData()
print (self.countryList)
}
else {
print ("Error fetching countries")
}
}
}
}
extension MainViewController: UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
populationLabel.text = countryList[indexPath.row].population
sizeLabel.text = countryList[indexPath.row].size
countryLabelMain.text = countryList[indexPath.row].name
}
}
extension MainViewController: UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print (countryList.count)
return countryList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = countriesTableView.dequeueReusableCell(withIdentifier: "CountriesCell", for: indexPath) as! CountriesCell
cell.countryLabel.text = countryList[indexPath.row].name
return cell
}
}
您没有在主线程上重新加载表视图。
而不是:self.countriesTableView.reloadData()
尝试: DispatchQueue.main.async{[weak self] in self?.countriesTableView.reloadData() }
以下对我来说很好用:
override func viewDidLoad() {
super.viewDidLoad()
countriesTableView.delegate = self
countriesTableView.dataSource = self
countriesTableView.estimatedRowHeight = 60 // use as you need
countriesTableView.rowHeight = UITableView.automaticDimension
countriesTableView.register(UINib(nibName: "CountriesCell", bundle: nil), forCellReuseIdentifier: "CountriesCell")
getCountries()
}
func getCountries() {
NetworkManager.shared.getCountryList { success in
if success {
self.countryList = NetworkManager.shared.data!
DispatchQueue.main.async{ [weak self] in
self?.countriesTableView.reloadData()
}
}
else {
print ("Error fetching countries")
}
}
}
可能是单元格的问题,设置单元格大小的默认值,或者使用默认单元格
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 70
}
我创建了一个简单的 TableView,它从 Firestore 获取国家/地区列表。 网络请求工作正常,我不怀疑有任何问题。 所有变量都已填充。 控制台中没有显示错误。 但是我的 TableView 仍然是空的,没有出现在 UI.
中有人可以看出下面代码中的任何明显错误吗?
import UIKit
class MainViewController: UIViewController {
[@IBOutlets...]
var countryList: [Country] = []
override func viewDidLoad() {
super.viewDidLoad()
countriesTableView.delegate = self
countriesTableView.dataSource = self
countriesTableView.register(UINib(nibName: "CountriesCell", bundle: nil), forCellReuseIdentifier: "CountriesCell")
getCountries()
}
func getCountries (){
NetworkManager.shared.getCountryList { success in
if success {
self.countryList = NetworkManager.shared.data!
self.countriesTableView.reloadData()
print (self.countryList)
}
else {
print ("Error fetching countries")
}
}
}
}
extension MainViewController: UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
populationLabel.text = countryList[indexPath.row].population
sizeLabel.text = countryList[indexPath.row].size
countryLabelMain.text = countryList[indexPath.row].name
}
}
extension MainViewController: UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print (countryList.count)
return countryList.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = countriesTableView.dequeueReusableCell(withIdentifier: "CountriesCell", for: indexPath) as! CountriesCell
cell.countryLabel.text = countryList[indexPath.row].name
return cell
}
}
您没有在主线程上重新加载表视图。
而不是:self.countriesTableView.reloadData()
尝试: DispatchQueue.main.async{[weak self] in self?.countriesTableView.reloadData() }
以下对我来说很好用:
override func viewDidLoad() {
super.viewDidLoad()
countriesTableView.delegate = self
countriesTableView.dataSource = self
countriesTableView.estimatedRowHeight = 60 // use as you need
countriesTableView.rowHeight = UITableView.automaticDimension
countriesTableView.register(UINib(nibName: "CountriesCell", bundle: nil), forCellReuseIdentifier: "CountriesCell")
getCountries()
}
func getCountries() {
NetworkManager.shared.getCountryList { success in
if success {
self.countryList = NetworkManager.shared.data!
DispatchQueue.main.async{ [weak self] in
self?.countriesTableView.reloadData()
}
}
else {
print ("Error fetching countries")
}
}
}
可能是单元格的问题,设置单元格大小的默认值,或者使用默认单元格
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 70
}