2017-03-02 4 views
1

Ich versuche, eine App ähnlich wie iOS native Reminders App zu bauen. Wo gibt es eine Liste von Artikeln mit Kopf- und Fußzeile? Jede Zelle enthält eine UITextView, die die Zellenhöhe dynamisch ändert, wenn der Benutzer tippt. Fußzeilenansicht enthält die gleiche Zellenansicht, außer dass ich möchte, dass es eine Fußzeile ist, so dass es in der Ansicht von unten bleiben würde. Ich habe Zelle auf dynamische Höhe eingestellt.UITableView reloadSections löst nicht viewForFooterInSection aus?

checklistTable.rowHeight = UITableViewAutomaticDimension 
checklistTable.estimatedRowHeight = 60 

checklistTable.sectionFooterHeight = UITableViewAutomaticDimension 
checklistTable.estimatedSectionFooterHeight = 60 

hier ist die Logik für die Höhen Aktualisierungs-Zelle während des Tippens, das perfekt für regelmäßige Zellen funktioniert, aber für Fußzeile Ansicht funktioniert nicht. Ich legte einen Haltepunkt in viewForFooterInSection, es wurde nie nach dem ersten Laden aufgerufen.

func textViewDidChange(_ textView: UITextView) { 

    let startHeight = textView.frame.size.height 
    let calcHeight = textView.sizeThatFits(textView.frame.size).height 

    if startHeight != calcHeight { 
     UIView.setAnimationsEnabled(false) 
     tableView?.beginUpdates() 

     if cellType == .footer { 
      tableView?.reloadSections(IndexSet(integer: 0), with: .automatic) 
     } 

     tableView?.endUpdates() 
     UIView.setAnimationsEnabled(true) 
    } 
} 

Kann mir jemand in die richtige Richtung zeigen? Dank

+0

Hat viewForFooterInSection jemals zunächst aufgerufen? –

+0

Die API-Dokumentation sagt nur, dass diese Methode die Zellen aktualisiert, nicht die Kopf- und Fußzeilen. – picciano

+0

@nirav Ja, viewForFooterInSection ruft Aufruf initialisieren. und irgendwann beim Scrollen –

Antwort

2

Aktivieren & deaktivieren Animationen auf UIView & Aufruf tableView?.beginUpdates() sieht gleichzeitig mehrdeutig.
einfach, sollte reloadSections Aufrufen arbeiten, wie:

if startHeight != calcHeight { 

     if cellType == .footer { 
      tableView?.reloadSections(IndexSet(integer: 0), with: .automatic) 
     } 
    } 
+0

Danke @ystack. Ich habe es versucht, und es macht keinen Unterschied :( –

+0

woah! Haben Sie versucht, eine einfache 'table.reloadData()'? – ystack

+0

reloadData würde wahrscheinlich die Fußzeile neu zeichnen, aber ich bin wirklich auf der Suche nach einer eleganten Möglichkeit, die Abschnitt Fußzeile zu aktualisieren, ohne die gesamte Tabelle neu zu laden, neu laden auch Tastaturabweisung, die ich nicht will, während der Benutzer tippt. –

Verwandte Themen