iOS 7 & 8 dynamische TableViewCell Höhe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • iOS 7 & 8 dynamische TableViewCell Höhe

    Hallo Forum!

    Ich habe einen TableViewController für Matches. Dieser Controller zeigt Daten von Matches an. Da diese Matches unterschiedliche Informationen liefern benötige eine dynamische Höhe der Cells.
    Ich habe einen Screenshot angehängt, wie so etwas aussieht. Die Abstände und die dynamischen Höhen der Labels habe ich mittels Layout Constraints bewerkstelligt (funktioniert auch alles).

    Mein Problem liegt darin, dass ich auf keine dynamischen Cell Höhen komme. Ich habe unterschiedliche Ansätze im www gefunden. Ich bin aber auf kein richtiges Ergebnis gekommen, da diese Tutorials für Cells mit Title und Subtitle Labels sind.

    Ich hoffe ich konnte mich verständlich ausdrücken.
    Hat hier irgendwer im Forum einen Ansatz bzw. vl Erfahrung damit?

    Bin über jegliche Hilfe dankbar!
    Dateien
  • In der Methode tableView:heightForRowAtIndexPath: erzeugst Du eine Zelle welche nur zur Berechnung der Zellenhöhe dient. Die Referenz kannst Du Dir z.B. mit einem Property merken, damit nicht für jeden Aufruf eine neue Zelle erzeugt werden muss.

    Diese Zelle füllst Du dann mit den entsprechenden Daten passend zum indexPath: Danach kannst Du die benötigte Höhe der Zelle ermitteln und diesen Wert als heightForRow zurückgeben.
  • Danke an alle! Ich habe mein nun Problem gelöst. Ich nutze jetzt eine PrototypeCell um mir die variable Höhe der Cells in der tableView:heightForRowAtIndexPath Methode zu berechnen.
  • Ich mache das unter iOS ebenso wie McDan. Hier noch die Methode zum Berechnen der benötigten Höhe:

    Quellcode

    1. // UIView category
    2. - (CGSize)mkm_preferedLayoutSizeForWidth:(CGFloat)constrainingWidth
    3. {
    4. [self layoutIfNeeded];
    5. NSArray *constraints = @[[NSLayoutConstraint constraintWithItem:self
    6. attribute:NSLayoutAttributeWidth
    7. relatedBy:NSLayoutRelationEqual
    8. toItem:nil
    9. attribute:NSLayoutAttributeNotAnAttribute
    10. multiplier:1.0
    11. constant:constrainingWidth],
    12. [NSLayoutConstraint constraintWithItem:self attribute:NSLayoutAttributeHeight
    13. relatedBy:NSLayoutRelationLessThanOrEqual
    14. toItem:nil
    15. attribute:NSLayoutAttributeNotAnAttribute
    16. multiplier:1.0
    17. constant:UILayoutFittingExpandedSize.height]];
    18. [self addConstraints:constraints];
    19. [self updateConstraints];
    20. CGSize size = [self systemLayoutSizeFittingSize:CGSizeMake(constrainingWidth, UILayoutFittingCompressedSize.height)];
    21. [self removeConstraints:constraints];
    22. return size;
    23. }
    Alles anzeigen

    Wenn Dein View alle benötigten constraints hat (also auch am unteren Rand), dann bekommst Du damit die richtige Höhe. Achtung: die obige Methode musst Du dem contentView der tableview cell schicken.

    Ab iOS 8 brauchst Du den ganzen Hokuspokus überhaupt nicht mehr, dann brauchst Du zwar ein separates UITableViewDelegate für iOS <=7 und iOS 8, aber das empfiehlt sich aus Codehygienegründen eh (also das delegate nicht im VC zu implementieren).

    Beste Grüße, Markus

    P.S.: Ich bin zu blöd für die Codeeinrückung hier in der Forensoftware, gibt es da eine automatische Lösung oder muss man das tatsächlich immer mit Leerzeichen von Hand einrücken?
  • Markus Müller schrieb:


    P.S.: Ich bin zu blöd für die Codeeinrückung hier in der Forensoftware, gibt es da eine automatische Lösung oder muss man das tatsächlich immer mit Leerzeichen von Hand einrücken?


    Also ich formatiere meinen gerosteten Code immer mit diesem Tool hier:
    github.com/benoitsan/BBUncrust…ode/blob/master/README.md

    Danach kopiere ich meinen Code von Xcode hier ins Forum mit Shift+Alt+Cmd+V herein und es schaut eigentlich immer schön aus.

    PS: Danke für den Code
  • Markus Müller schrieb:

    P.S.: Ich bin zu blöd für die Codeeinrückung hier in der Forensoftware, gibt es da eine automatische Lösung oder muss man das tatsächlich immer mit Leerzeichen von Hand einrücken?

    Berechtigte Frage.
    Meine Meinung diesbezüglich:
    Nutzt Du die Quellcode-Ansicht des Editors, dann klappt das mit dem Einrücken.
    Nutzt Du die Standardansicht (also alle diese hässlichen Buttons aktiv), dann klappt das mit dem Einrücken nicht.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P