Ich möchte eine Fußzeile erstellen, die auf die Höhe der Tabellenansicht Zellen dynamisch ist.So erstellen Sie dynamische Tabellenansicht Fußzeile durch Ändern der Höhe der Zellen
Meine Ausgangssituation wie folgt aussieht:
Wenn ich auf eine Zeile klicken, wird die Höhe dieser Zelle auf 194 ändern (44 vor)
Es don zeige nicht alle Zeilen an.
Wenn ich die Fußzeile -150 bekommen es sieht aus wie:
Und wenn ich alle Zellen schließen Sie es wie und 150 sieht, die ich mit -150 zum Footer bekommen sind hier weiß:
Mein Code:
var selectedCellIndexPath: Int?
let selectedCellHeight: CGFloat = 194.0
let unselectedCellHeight: CGFloat = 44.0
var cellsHeight = [44, 44, 44]
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.beginUpdates()
if selectedCellIndexPath != nil && selectedCellIndexPath == indexPath.row {
selectedCellIndexPath = nil
}
else {
selectedCellIndexPath = indexPath.row
}
if selectedCellIndexPath != nil {
tableView.scrollToRow(at: indexPath, at: .none, animated: true)
}
tableView.endUpdates()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
let rowHeight:CGFloat = 44
var rowsHeight:CGFloat = 3 * rowHeight
/*for i in 0..<cellsHeight.count {
rowsHeight += CGFloat(cellsHeight[i])
}*/
let topHeight = UIApplication.shared.statusBarFrame.height + self.navigationController!.navigationBar.frame.height
let viewHeight = self.view.frame.height
let headerHeight:CGFloat = 30
let height = viewHeight - topHeight - rowsHeight - headerHeight //- 150
return CGFloat(height)
}
Nur eine Zeile hat die Höhe 194 und die andere 44. Irgendwelche Ideen, wie Sie das Problem lösen können? Thx
Edit:
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let dateFormatter = DateFormatter()
//dateFormatter.dateStyle = DateFormatter.Style.short
dateFormatter.dateFormat = "dd.MM.yyyy HH:mm"
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutDateCell", for: indexPath) as! WorkoutDateTableViewCell
cell.typeLabel.text = "Beginn"
cell.dateDatepicker.date = Date()
cell.dateDatepicker.tag = indexPath.row
cell.dateLabel.text = dateFormatter.string(from: cell.dateDatepicker.date)
cell.selectionStyle = .none
return cell
}
else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutDateCell", for: indexPath) as! WorkoutDateTableViewCell
cell.typeLabel.text = "Ende"
cell.dateDatepicker.date = Date()
cell.dateDatepicker.tag = indexPath.row
cell.dateLabel.text = dateFormatter.string(from: cell.dateDatepicker.date)
cell.selectionStyle = .none
return cell
}
else {
let cell = tableView.dequeueReusableCell(withIdentifier: "workoutSportsCell", for: indexPath) as! WorkoutSportsTableViewCell
cell.sportsLabel.text = "Sportart"
cell.sportstypeLabel.text = workoutSports[coreData.getSportsIndex()]
cell.sportsPicker.delegate = self
cell.sportsPicker.dataSource = self
cell.sportsPicker.selectRow(coreData.getSportsIndex(), inComponent: 0, animated: false)
cell.selectionStyle = .none
return cell
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if selectedCellIndexPath == indexPath.row {
return selectedCellHeight
}
return unselectedCellHeight
}
Wenn ich das richtig verstehe, sollte ich 3 zusätzliche Zellen für die Pflücker erstellen und einen unter der Zelle anzeigen, auf die ich geklickt habe? – MMbach
Nein. Verwenden Sie einen statischen oder dynamischen Zellenprototyp? – MinuMaster
Dynamische Zelle Prototyp – MMbach