2017-10-25 3 views
1

Ich erstelle eine dynamische TableView und setze die Zelle mit der Rowheight von 44 im Storyboard. Die Höhe der Tabellenansicht basiert also auf der Anzahl der Zeilen, die meine Datenbank entsprechend den Ergebnissen zurückgibt. Gleichzeitig verbinde ich die bottom constraint der TabelleView mit der Ansicht mit einem IBOutlet. Die Höhe der Tabellenansicht überlagert also nicht die Tastatur und hält etwas Abstand von der Konfiguration. Meine Frage ist, wie kann ich die tableView.frame.size.height mit sizeToFits() in iOS 10 und niedriger aktualisieren?UiTableview aktualisiert Sizetofit nicht in iOS 10, aber arbeitet in iOS 11

Hier sind einige Protokolle klareres Bild haben, tableView and contentView size for iOS 10

Ein anderes Bild, wenn die Tableview des sizetofit() nie von kleineren zu größeren erhöhen. Another logs, es wird komplett verschwunden sein, wenn meine Datenbank 0 zurückgibt, dann für die contentSize wird 0.0 und dann, wenn ich versuche, einige Texte zu entfernen, wird die contentSize zurück zu 44, weil 1 Ergebnis aus der Datenbank und von rechts die SizeToFit() wird passe die Größe basierend auf der contentSize an. Aber in diesem Fall bleiben sie immer noch bei 0.0 und werden nie aktualisiert.

Bild für iOS 11, tableView and contentView size for iOS 11, die Höhe für die Tabellenansicht mit 632 ist korrekt, weil ich einige automatische Layout festgelegt, um zu verhindern stören mit der Tastatur, so dass Benutzer in der Tabelle nach unten scrollen können.

Einige Codes für ein besseres Verständnis,

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    // configuration for tableViewCell. 

    tableView.sizeToFit() // WORKs for iOS 11 but doesn't update for iOS10 

    if UIDevice.current.userInterfaceIdiom == .pad { 
     tableView.setNeedsLayout() 
     tableView.layoutIfNeeded() 
     cell.backgroundColor = UIColor.darkGray 
    } 

    return cell 
} 

Antwort

0

Ich bin nicht sicher, was wollen Sie erreichen. Angenommen, Sie möchten, dass Ihre TableView-Größe mit ihrem Inhalt identisch ist, sollten Sie die Einschränkung Ihrer UITableView-Höhe tatsächlich bearbeiten.

Sie müssen die Höhe nach Sie Ihre tableView dataSource aktualisieren. Wenn Sie sizeToFit() verwenden, sollten Sie es auch tun nach Ihre Tableview Datasource Aktualisierung

// using sizeToFit 
func loadData(){ 
    allData = loadFromDatabase() 
    tableView.reloadData() 
    tableView.sizeToFit() 
} 

Wenn Sie Sie versuchen

func resizeTableView(){ 
    allData = loadFromDatabase() 
    tableView.reloadData() 
    let tableFrame = tableView.frame 
    tableFrame.size.height = tableView.contentSize.height 
    tableView.frame = tableFrame 
} 

ich persönlich das wird einstellen können manuell berechnen und stellen Sie Ihre Einschränkung wählen Frame manuell oder setzen Sie die Einschränkung anstelle von sizeToFit, aufgrund einiger Fehler gemeldet, wenn sizeToFit

Verwandte Themen