Autolayout ignoriert multi-line detailTextLabel bei der Berechnung der UITableViewCell-Höhe (alle Stile)

So versuche ich, die eingebauten UITableViewCell-Stile - insbesondere UITableViewCellStyleSubtitle - mit einer (einzelnen) Zeile zu verwenden textLabel aber multiline detailTextLabel. Die (automatisch) berechnete Zellenhöhe ist jedoch durchweg zu kurz und scheint zu ignorieren, dass mehr als eine Detailzeile vorhanden ist.

Ich habe versucht, numberOfLines = 0, estimatedRowHeight, UITableViewAutomaticDimension, preferredMaxWidthLayout usw. zu verwenden, aber in allen Permutationen das Verhalten - in der Tat fürall die UITableViewCell-Stile - anscheinend berücksichtigt die UITableViewAutomaticDimension-Zellenhöhenberechnung eine mehrzeilige textLabel (yay!), setzt aber fälschlicherweise das @ vora detailTextlabel ist höchstens eine Zeile (nein!). Infolgedessen sind Zellen mit einem mehrzeiligen detailTextLabel zu kurz, und der Zelleninhalt wird über den oberen und unteren Rand der Zelle verteilt.

Ich habe eine schnelle Test-App gepostet, die dieses Verhalten auf GitHub zeigt.Hie. Das Hinzufügen zusätzlicher Textzeilen ist in Ordnung - alle Zellenstile werden entsprechend höher, um sie anzupassen. Das Hinzufügen zusätzlicher Detailzeilen ändert jedoch nichts an der Zellenhöhe und führt dazu, dass der Inhalt schnell überläuft. Der Text + das Detail sind selbst korrekt angeordnet und werden korrekt über der Mitte der Zelle zentriert (in diesem Sinne funktioniert layoutSubviews korrekt), aber die Gesamthöhe der Zelle selbst bleibt unverändert.

Es scheint fast so, als gäbe es zwischen cell.contentView und den Beschriftungen keine tatsächlichen Einschränkungen von oben und unten. Stattdessen wird die Zellenhöhe direkt aus der Höhe des (möglicherweise mehrzeiligen) textLabel und des (nur einzeiligen) textLabel berechnet. detailTextLabel, und dann ist alles über der Mitte der Zelle zentriert ... Auch hier ist mehrzeiliges textLabel in Ordnung, und ich mache nichts anderes zwischen textLabel und detailTextLabel, aber nur das erstere passt die Zellenhöhe (korrekt) an.

So meine Frage ist, ob es möglich ist, die eingebauten UITableViewCell-Stile zu verwenden, um @ zuverlässig anzuzeig multiline detailTextLabels, oder ist das einfach nicht möglich und Sie müssen stattdessen eine benutzerdefinierte Unterklasse erstellen? [oder fast gleichwertig, ohne layoutSubviews in einer Unterklasse überschreiben und alle Einschränkungen manuell neu verkabeln zu müssen].

[4. Mai 2016] Fazit: Ab iOS9 funktionieren mehrzeilige detailTextLabels mit UITableViewAutomaticDimension nicht mehr wie erwartet; Die Zelle ist durchweg zu kurz und der Text / das Detail wird über den oberen und unteren Rand verteilt. Entweder müssen Sie die richtige Zellenhöhe manuell berechnen oder Sie erstellen und gestalten Ihre eigene gleichwertige benutzerdefinierte UITableViewCell-Unterklasse oder (siehe meine Antwort unten) die Unterklasse UITableViewCell und korrigierensystemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:, um die richtige Höhe zurückzugeben [empfohlen]

Antworten auf die Frage(10)

Ihre Antwort auf die Frage