I zwei tableview in der gleichen Ansicht Controller verfügen, tableview1
und tableview2
, die Höhe Zellen in beiden Tableviews fixiert sind, und I gesetzt auch delegate
und dataSource
für sie ist der einzige Unterschied ist, dass tableview1
habe schon Daten, wenn ich den View-Controller betrete, aber nicht.Difference über heightForRowAt und setzen rowHeight in UITableView
Meine Frage ist, ich tableview1 die Zeilenhöhe von func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
aber für tableview2
einstellen Ich habe self.tableview2.rowHeight
in viewDidLoad()
zu setzen, warum ist das so?
EDIT
-Code
class MainViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView1: UITableView! // tag = 1
@IBOutlet weak var tableView2: UITableView! // tag = 2
var getDataViewController: GetDataViewController!
override func viewDidLoad() {
self.tableView1.delegate = self
self.tableView1.dataSource = self
self.tableView2.delegate = self
self.tableView2.dataSource = self
self.tableView2.rowHeight = 44 // work for tableView2
getDataViewController = storyboard!.instantiateViewController(withIdentifier: "getData") as! GetDataViewController
}
// ...
// Table View DataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView.tag == 1 {
return tableView1DataArray.count
}
else if tableView.tag == 2 {
return tableView2DataArray.count
}
}
// Table View Delegate
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if tableView.tag == 1 {
return 122 // work for tableView1
}
return 44 // not work for tableView2
}
}
ich tableView2 Daten in anderem View-Controller:
class GetDataViewController: UIViewController {
var mainViewController: MainViewController!
// ...
@IBAction func ok(_ sender: UIButton) {
let index = IndexPath(row: tableView2.count, section: 0)
// ...
let data = SomeData()
tableView2DataArray.append(data)
DispatchQueue.main.async {
mainViewController.tableView2.inserRows(at: [index], with: .automatic)
}
}
}
Also, wenn ich Daten noch nicht, 'Tableview (_: heightForRowAt:) 'ist nutzlos? Auch wenn ich Daten bekommen habe und 'reloadData()' verwendet habe, funktioniert 'tableView (_: heightForRowAt:)' immer noch nicht, warum? – ioio007
Die Delegate-Methode wird aufgerufen, wenn eine Zelle angezeigt werden soll. Sie haben möglicherweise eine "0" Anzahl von Zeilen pro Abschnitt zurückgegeben (überprüfen Sie diese Methode) und überprüfen Sie, ob sie tatsächlich mit Haltepunkten aufgerufen wird. –
Ich bin sicher, die Anzahl der Zeilen pro Abschnitt ist nicht "0", aber rowHeight wird auf "-1.0" gesetzt, wenn ich 'tableView (_: heightForRowAt:)' – ioio007