1

Ich versuche, alle Zeilen in meiner Tabelle haben eine eigene Zeilenhöhe basierend auf den Zeilen des Textes in der Bezeichnung in dieser Zelle. Mein Ausgangspunkt ist die Wenderlich Tutorial hier: https://www.raywenderlich.com/129059/self-sizing-table-view-cellsZeilen alle die gleiche Höhe nach der Verwendung von UITableViewAutomaticDimension

Ich verwende die Methode UITableViewAutomaticDimension wie Sie unten sehen können. Aber aus irgendeinem Grund, wenn ich die Simulation starte, sind die Reihen alle gleich hoch. Es scheint egal zu sein, welche Nummer ich für die geschätzte Zeilenhöhe im Code eingegeben habe oder welche Nummer ich für die Zeilenhöhe in der Tabellenansichtszelle im Storyboard eingegeben habe. Es kommt immer die gleiche Höhe für alle Reihen heraus.

Was fehlt mir hier? Danke an alle!

import UIKit 

class LoLFirstTableViewController: UITableViewController { 

    var tasks:[Task] = taskData 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.rowHeight = UITableViewAutomaticDimension 
     tableView.estimatedRowHeight = 60.0 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return tasks.count 
    } 

    @IBAction func cancelToLoLFirstTableViewController(_ segue:UIStoryboardSegue) { 
    } 

    @IBAction func saveAddTask(_ segue:UIStoryboardSegue) { 
     if let AddTaskTableViewController = segue.source as? AddTaskTableViewController { 

      if let task = AddTaskTableViewController.task { 
      tasks.append(task) 

       let indexPath = IndexPath(row: tasks.count-1, section: 0) 
       tableView.insertRows(at: [indexPath], with: .automatic) 
      } 
     } 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 
    -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath) 
     as! TaskCell 
     let task = tasks[indexPath.row] as Task 
      cell.task = task 
     return cell 
     } 
} 

` contraints simulation

+0

zeigen Sie Ihre Zelle, Sie müssen falsche Auto-Layout-Einschränkungen haben. –

+0

Haben Sie Inhalte, die von Zelle zu Zelle unterschiedlich sein sollten? Betreffend * "Es scheint egal zu sein, welche Nummer ich für die geschätzte Zeilenhöhe im Code eingegeben habe oder welche Nummer ich für die Zeilenhöhe in der Tabellenansichtszelle im Storyboard eingegeben habe" *; Keines dieser Dinge sollte bei der Bestimmung der endgültigen Höhe einer Auto-Sizing-Zelle eine Rolle spielen. – Connor

+0

Ja, der Inhalt sollte von Zelle zu Zelle unterschiedlich sein. Mein Beispieltext reicht von einer einzelnen Zeile bis zu drei Zeilen. Ich befestige Screenshots meiner Constraints und wie die Ausgabe des Simulators momentan aussieht. Danke Umair und Connor! –

Antwort

0

Sie haben keine Einschränkungen auf dem Etikett, so gibt es nichts über das Label, das etwas anderes zu ändern verursachen würde. Der Grund dafür, dass Sie keine Einschränkungen für das Etikett haben, ist, dass Sie alles mit Stapelansichten machen. Aber die Stapelansichten werden nicht von innen heraus magisch sein. So kommen sie dir total in die Quere.

Ich würde vorschlagen, die Stapelansichten vollständig zu beseitigen. Jetzt können Sie das auf normale Weise tun, und es wird funktionieren.

+0

Dies ist ein herunterladbares Projekt, das Zellen entsprechend der Textmenge in einem Etikett ausfüllt. Sie können es herunterladen und ausführen, und Sie werden sehen, dass es funktioniert. https://github.com/matnteub/Programming-iOS-Book-Examples/blob/master/bk2ch08p424variableHeights/ch21p722variableHeights/RootViewController.swift – matt

+0

Super, vielen Dank, matt! Also, wie würde ich wieder in eine Checkbox-Schaltfläche auf der rechten Seite hinzufügen, ohne zurück in eine Stapelansicht hinzuzufügen? –

+0

Setzen Sie einfach ein Kontrollkästchen auf der rechten Seite. Dies kann die Zubehöransicht sein, oder Sie können sie als Unteransicht von "contentView" hinzufügen, genau wie das Etikett. Der Schlüssel ist, die Einschränkungen richtig zu machen. Wahrscheinlich möchten Sie, dass dieses Objekt vertikal zentriert ist, mit einer Beschränkung für Höhe und Breite und am rechten Rand der Superansicht positioniert ist. - Die Stack-Ansicht scheint in einer Tabellenansichtszelle ohnehin wie Overkill zu sein. – matt

Verwandte Themen