2017-05-20 1 views
0

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:

enter image description here

Wenn ich auf eine Zeile klicken, wird die Höhe dieser Zelle auf 194 ändern (44 vor)

enter image description here

Es don zeige nicht alle Zeilen an.

Wenn ich die Fußzeile -150 bekommen es sieht aus wie:

enter image description here

Und wenn ich alle Zellen schließen Sie es wie und 150 sieht, die ich mit -150 zum Footer bekommen sind hier weiß:

enter image description here

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 
} 

Antwort

1

Um dies zu archivieren Sie nur Zellen statt Fußzeile Ansicht verwenden können.

Schritt 1: Fußzeile entfernen.

Schritt 2: Zelle der Datumsauswahl hinzufügen.

Schritt 3: Wenn Sie auf Begin & End DateTime-Zelle klicken, fügen Sie DateTime-Zelle unterhalb der ausgewählten Zelle ein und laden Sie die Tabellenansicht neu.

Schritt 4: Ich hoffe, dass Ihr Problem gelöst wird.

Lassen Sie mich wissen, wenn Sie Fragen haben.

Bearbeiten: Laut Diskussion müssen Sie nur den zusätzlichen Zelltrennzeichen mithilfe von TableFooterViewForSection entfernen.

Sie müssen also nur unter Zeile hinzufügen Ihr Problem zu lösen:

tableView.tableFooterView = UIView(frame: CGRect(x:0, y:0, width:tableView.frame.width, heigth:0)) 

Und func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat Methode entfernen.

Ich hoffe, es wird Ihnen helfen.

+0

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

+0

Nein. Verwenden Sie einen statischen oder dynamischen Zellenprototyp? – MinuMaster

+0

Dynamische Zelle Prototyp – MMbach

Verwandte Themen