2015-03-08 10 views
8

Ist es möglich, eine UITableViewCell in iOS 8 selbst zu erstellen, ohne eine benutzerdefinierte UITableViewCell zu erstellen?Self-Sizing (dynamische Höhe) Zellen in iOS 8 - möglich ohne benutzerdefinierte UITableViewCell?

Ich dachte, dass die Standard-UITableViewCell-Typen (UITableViewCellStyleDefault, UITableViewCellStyleSubtitle, UITableViewCellStyleValue1, UITableViewCellStyleValue2) automatische Layout-Einschränkungen eingebaut hatten. Dies wird durch die Tatsache bestätigt, dass die Einschränkungen für nicht benutzerdefinierte Zellen im Storyboard nicht geändert werden können.

Aber wenn ich eine nicht-benutzerdefinierte Zelle vom Typ verwenden UITableViewCellStyleValue1, setzen Sie ihn in der Storyboard-up, Set numberOfRows für textlabel und detailTextLabel auf 0, und stellen Sie den viewDidLoad Code wie unten, nur die textlabel der Zelle berücksichtigt wird in die automatische Größeneinstellung der Zelle. Wenn das detailTextLabel auf mehr Zeilen als das textLabel angezeigt wird, wird der Text für detailTextLabel über den oberen und unteren Rand der Zelle ausgegeben. Auch hier ändert sich die Größe der Zelle für textLabel, scheint aber die detailTextLabel in ihrem Größenänderungsprozess zu ignorieren.

Die Hauptsache, die ich wissen muss, ist - muss ich eine benutzerdefinierte Zelle sogar für die Zeilen erstellen, die eine Standardzelle verwenden können, wenn ich Dynamischen Text und Self-Sizing richtig unterstützen möchte?

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    [self.tableView setEstimatedRowHeight:DEFAULT_ROW_HEIGHT]; 
    [self.tableView setRowHeight:UITableViewAutomaticDimension]; 
} 
+2

Alles, was ich gefunden habe, sagt, Sie müssen entweder -tableView: heightForRowAtIndexPath: oder eine benutzerdefinierte Unterklasse verwenden. Ich kann nicht erkennen, warum das automatische Layout in Standardzellenklassen für die Bereitstellung von iOS 8 nicht ordnungsgemäß eingerichtet wurde, aber es sieht so aus, als ob es nicht funktioniert. – Thromordyn

+1

@Thromordyn Hat sich das in iOS 9 überhaupt geändert? Ich ziehe meine Haare aus und versuche, all die vielen und unterschiedlichen Aspekte der richtigen Detailzelle nachzubilden, nur damit die Zeilenhöhe zunimmt, wenn das detailTextLabel länger als 1 Zeile ist. Wurde das schon überall gemacht? Ich versuche, das Rad neu zu erschaffen, aber es gibt so viele Dinge, an die man denken muss, dass sich das wie eine große Zeitverschwendung anfühlt. – SAHM

+1

Verlorene Stunden zu diesem Thema -_- – aehlke

Antwort

3

ich das gerade versucht, in iOS 10/XCode 8 (gleiche Ergebnisse in iOS 9/XCode 7) mit den verschiedenen Zelltypen und es sieht aus wie es möglich ist, nur für die textlabel und nicht für die detailTextLabel.

(Wiederholung von grundsätzlich das Problem, dass die OP erwähnt)

Viewcontroller-Code, der einen Text abwechselnd auf detailTextLabel und textlabel setzt.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
    @IBOutlet weak var tableView: UITableView! 

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
     if indexPath.row % 2 == 0 { 
      cell.textLabel?.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." 
      cell.detailTextLabel?.text = "<- textLabel" 
     } else { 
      cell.textLabel?.text = "detailTextLabel ->" 
      cell.detailTextLabel?.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." 
     } 
     return cell 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 10 
    } 

} 

Stellen Sie sicher, legen Sie die Zeile Unterkunft und textDetailLabel textlabel 0 und hier sind die Ergebnisse.

Grundzelle enter image description here

Rechts-Detail Handy enter image description here

Left Details Handy enter image description here

Untertitel Zelle enter image description here

Ich werde dies als Fehler melden.

+1

Haben Sie das für UITableViewCellStyleValue1 und die Detailtextbeschriftung versucht? – SAHM

+1

Sie haben Recht, es sieht so aus, dass es nur auf textLabel funktioniert und nicht auf detailTextLabel. Dies muss ein Problem sein, bei dem Constraints dem detailTextLabel nicht ordnungsgemäß hinzugefügt werden. Wird meine Antwort aktualisieren. –

+0

Ich frage mich, ob sie planen, dies an irgendeinem Punkt zu beheben – SAHM