Die Einstellung für die benutzerdefinierte Zellenzeilenhöhe im Storyboard reagiert nicht

213

Ich versuche, die Zellenhöhe für eine der Zellen in meiner Tabellenansicht anzupassen. Ich passe die Größe über die Einstellung "Zeilenhöhe" im "Größeninspektor" der betreffenden Zelle an. Wenn ich die App auf meinem iPhone ausführe, wird für die Zelle die Standardgröße aus der "Zeilengröße" in der Tabellenansicht festgelegt.

Wenn ich die "Zeilengröße" der Tabellenansicht ändere, ändert sich die Größe aller Zellen. Ich möchte das nicht tun, da ich eine benutzerdefinierte Größe nur für eine Zelle möchte. Ich habe viele Posts gesehen, die eine programmatische Lösung für das Problem haben, aber ich würde es vorziehen, dies über das Storyboard zu tun, wenn dies möglich ist.

zirinisp
quelle

Antworten:

295

Bei dynamischen Zellen rowHeightüberschreibt die Einstellung in UITableView immer die Zeilenhöhe der einzelnen Zellen.

Bei statischen Zellen rowHeightkann das Festlegen einzelner Zellen UITableViews überschreiben.

Sie sind sich nicht sicher, ob es sich um einen Fehler handelt? Apple tut dies möglicherweise absichtlich?

Pixelfreak
quelle
36
Richtige Antwort Nr. 3 und insbesondere, weil diese Antwort für Interface Builder / Storyboards gilt. Wenn Sie die Auswahl Zelle in IB, dann ist die Größe Inspektor an der Spitze zeigt Zeilenhöhe (mit einer „custom“ Checkbox), aber wenn Sie die ganzen wählen Tabelle sehen Sie die Größe Inspector zeigt Zeilenhöhe an der Spitze auch dort (keine „custom " in diesem Fall). Wie pixelfreak sagt, wird für dynamische Zellen nur die Einstellung für die Tabellenansicht verwendet. (Nicht sicher, ob es beabsichtigt ist)
Rhabarber
8
Diese Antwort impliziert, dass die Lösung einfach darin besteht, den UITableViewInhalt von Dynamic Prototypesauf zu ändern. Static CellsIch habe das getan, und mein gesamtes Projekt ist in die Luft gesprengt worden. Ich bin fast selbst umgebracht worden.
Abbood
4
Gibt es eine Möglichkeit, diese Nummer abzurufen? Ist die einzige Möglichkeit, tief zu graben, das Eintauchen in das Storyboard und das Herausziehen von dort?
Biclops
Es ist definitiv kein Fehler, da Ihre Tabelle dynamisch ist. Wie kann das System also wissen, wo Sie jede dieser Zellen verwendet haben? Und wie oft würde jeder Prototyp verwendet.
Vincent Bernier
Es scheint auch ein Problem zu sein , wenn Sie zunächst Setup eine Tabellenansicht als „statische Zellen“ und es dann ändern , um „dynamische Prototypen.“ Ich hatte ein Problem, bei dem sogar die Delegatmethode für rowHeight ignoriert wurde. Ich habe es zuerst gelöst, indem ich das Storyboard-XML direkt bearbeitet und dann die Storyboard-Szene von Grund auf neu erstellt habe, wobei ich von Anfang an dynamische Prototypen verwendet habe.
Eric Goldberg
84

Wenn Sie UITableViewController verwenden, implementieren Sie diese Methode:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

In der Funktion einer Zeile können Sie Höhe wählen. Beispielsweise,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
       return 100;
    } 
    else {
       return 60;
    }
}

In diesem Beispiel beträgt die Höhe der ersten Zeile 100 Pixel und die anderen 60 Pixel.

Ich hoffe dieser kann dir helfen.

Beber
quelle
2
Beber, muss man IMMER beides tun (überprüfen Sie Benutzerdefiniert und bearbeiten Sie den Wert für die Zeilenhöhe im Storyboard und geben Sie ihn im heightForRowAtIndexPath an)?
Marciokoko
Könnten Sie mir dabei helfen? Ich brauche dynamische Zellen mit dynamischer Höhe, aber wenn ich diese Methode verwende, verschwinden alle Zellen, egal was ich zurückgebe. Außer auf dem iPhone 5 das Gerät , wo es wie erwartet funktioniert. Kannst du verstehen warum?
Ostmeistro
34

Bei dynamischen Zellen überschreibt die rowHeightEinstellung UITableViewimmer die einzelnen Zellen rowHeight.

Dieses Verhalten ist, IMO, ein Fehler. Jedes Mal, wenn Sie Ihre Benutzeroberfläche an zwei Stellen verwalten müssen, ist sie fehleranfällig. Wenn Sie beispielsweise Ihre Zellengröße im Storyboard ändern, müssen Sie daran denken, sie auch im Storyboard zu ändern heightForRowAtIndexPath:. Bis Apple den Fehler behebt, besteht die derzeit beste Problemumgehung darin, ihn zu überschreiben heightForRowAtIndexPath:. Verwenden Sie jedoch die tatsächlichen Prototypzellen aus dem Storyboard, um die Höhe zu bestimmen, anstatt magische Zahlen zu verwenden . Hier ist ein Beispiel:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /* In this example, there is a different cell for
       the top, middle and bottom rows of the tableView.
       Each type of cell has a different height.
       self.model contains the data for the tableview 
    */
    static NSString *CellIdentifier;
    if (indexPath.row == 0) 
        CellIdentifier = @"CellTop";
    else if (indexPath.row + 1 == [self.model count] )
        CellIdentifier = @"CellBottom";
    else
        CellIdentifier = @"CellMiddle";

    UITableViewCell *cell = 
              [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    return cell.bounds.size.height;
}

Auf diese Weise wird sichergestellt, dass Änderungen an den Zellenhöhen Ihres Prototyps zur Laufzeit automatisch erfasst werden und Sie Ihre Benutzeroberfläche nur an einem Ort verwalten müssen: dem Storyboard.

memmons
quelle
2
Ich habe eine Antwort mit vollständigem Code einschließlich Caching veröffentlicht. siehe stackoverflow.com/a/16881312/292166
JosephH
1
Wow wow wow! Ich habe die Antwort positiv bewertet, aber sei dir bewusst! Diese Methode führt nicht nur zu Leistungseinbußen, wie @Brennan in den Kommentaren sagte, sondern auch zu einer wachsenden Speicherzuweisung bei jedem reloadData, so etwas wie Speicherverlust! Es wird benötigt, um die oben beschriebene Problemumgehung von Lensovet zu verwenden! Verbringen Sie einen Tag, um dieses Speicherleck zu erkennen!
Skywinder
Funktioniert nicht in Swift, da cell.bounds.size.height immer 0.0 zurückgibt
King-Wizard
1
Die Zellen sind zum Zeitpunkt des Aufrufs Ihrer tableView: heightForRowAtIndexPath-Methode noch nicht vorhanden. Sie sollten in der Lage sein, den an Sie übergebenen Indexpfad zu verwenden, um in Ihr Datenmodell zu indizieren und zu sehen, welche Art von Zelle dort verwendet wird. Berechnen Sie dann die Höhe für diese Zelle und geben Sie sie zurück. Auf diese Weise kann das System die Zellen in der Tabelle anordnen, bevor Zellen erstellt werden.
König-Zauberer
1
Außerdem sollten Sie keine eigene cellForRowAtIndexPath-Methode aufrufen. Tabellenansichten verfügen über eine cellForRowAtIndexPath-Methode, die eine Zelle für diesen Indexpfad zurückgibt, wenn sie derzeit auf dem Bildschirm angezeigt wird. Diesem Indexpfad ist jedoch häufig keine Zelle zugeordnet.
König-Zauberer
22

Ich habe den Code so erstellt, dass die verschiedenen Antworten / Kommentare darauf hinweisen, dass dies für Storyboards funktioniert, die Prototypzellen verwenden.

Dieser Code:

  • Die Zellenhöhe muss nicht an einer anderen Stelle als an der offensichtlichen Stelle im Storyboard festgelegt werden
  • Zwischenspeichert die Höhe aus Leistungsgründen
  • Verwendet eine allgemeine Funktion, um die Zellenkennung für einen Indexpfad abzurufen und doppelte Logik zu vermeiden

Vielen Dank an Answerbot, Brennan und Lensovet.

- (NSString *)cellIdentifierForIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = nil;

    switch (indexPath.section)
    {
        case 0:
            cellIdentifier = @"ArtworkCell";
            break;
         <... and so on ...>
    }

    return cellIdentifier;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [self cellIdentifierForIndexPath:indexPath];
    static NSMutableDictionary *heightCache;
    if (!heightCache)
        heightCache = [[NSMutableDictionary alloc] init];
    NSNumber *cachedHeight = heightCache[cellIdentifier];
    if (cachedHeight)
        return cachedHeight.floatValue;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    CGFloat height = cell.bounds.size.height;
    heightCache[cellIdentifier] = @(height);
    return height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [self cellIdentifierForIndexPath:indexPath];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    <... configure cell as usual...>
JosephH
quelle
Ich weiß, dass dies eine alte Antwort ist, aber findet jemand anderes, dass dies zu einem Stapelüberlauf führt? Wenn die Ansicht geladen wird, erhalte ich UISectionRowData refreshWithSection: tableViewRowData: ruft tableView auf: heightForRowAtIndexPath: ruft dequeueReusableCellWithIdentifier auf: ruft [UISectionRowData ...] auf, sodass ich einen rekursiven Stapelüberlauf habe. Ich wollte diese Lösung unbedingt verwenden, aber sie scheint mit iOS7 nicht zu funktionieren.
Sbaker
Funktioniert nicht in Swift, da cell.bounds.size.height immer 0.0 zurückgibt
King-Wizard
Die Zellen sind zu dem Zeitpunkt noch nicht vorhanden, als das System Ihre tableView: heightForRowAtIndexPath-Methode aufgerufen hat. Sie sollten in der Lage sein, den an Sie übergebenen Indexpfad zu verwenden, um in Ihr Datenmodell zu indizieren und zu sehen, welche Art von Zelle dort verwendet wird. Berechnen Sie dann die Höhe für diese Zelle und geben Sie sie zurück. Auf diese Weise kann das System die Zellen in der Tabelle anordnen, bevor Zellen erstellt werden.
König-Zauberer
Außerdem sollten Sie keine eigene cellForRowAtIndexPath-Methode aufrufen. Tabellenansichten verfügen über eine cellForRowAtIndexPath-Methode, die eine Zelle für diesen Indexpfad zurückgibt, wenn sie derzeit auf dem Bildschirm angezeigt wird. Diesem Indexpfad ist jedoch häufig keine Zelle zugeordnet.
König-Zauberer
@ Schneetiger Ich habe das nicht schnell versucht, aber ich verstehe deine Kommentare nicht. Ich rufe nicht [meine] eigene cellForRowAtIndexPath-Methode auf, und es ist absichtlich so, dass ich es nicht tue. Mir ist auch bewusst, dass die Zellen zum Zeitpunkt des Aufrufs von tableView: heightForRowAtIndexPath nicht vorhanden sind. Das ist der springende Punkt dieses Codes und warum dequeueReusableCellWithIdentifier verwendet wird, um eine Zelle abzurufen. Der in dieser Antwort angegebene Code funktioniert. Entweder ist in Swift etwas Besonderes los, in der schnellen Konvertierung stimmt etwas nicht, oder es wird versucht, ein anderes Problem zu lösen, auf das diese Frage / Antwort abzielt.
JosephH
19

Es gibt tatsächlich zwei Stellen, an denen Sie die Zeilenhöhe ändern müssen: erstens die Zelle (das haben Sie bereits geändert) und jetzt die Tabellenansicht auswählen und den Größeninspektor überprüfen

Kristjan H.
quelle
in der Tabellenansicht (nicht in der Zellenansicht)> in der Registerkarte Größeninspektor>
Zeilenhöhe
Macht mich jedes Mal verrückt, wenn ich dieses Detail vergesse. Keine Ahnung, warum das Anpassen der Zelle die tableView bei Verwendung von Storyboards nicht automatisch aktualisiert!
Roller
11

Ich denke, es ist ein Fehler.

Versuchen Sie, die Höhe nicht mit dem Utility-Inspektor anzupassen, sondern mit der Maus direkt auf das Storyboard zu ziehen.

Ich habe dieses Problem mit dieser Methode gelöst.

Fogni
quelle
10

Wenn Sie Swift verwenden, verwenden Sie dies wie folgt. Verwenden Sie kein Storyboard, um die Zeilenhöhe auszuwählen. Stellen Sie die Tabellenzeilenhöhe programmgesteuert wie folgt ein:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.row == 0 || indexPath.row == 1{
        let cell = self.tableView.dequeueReusableCellWithIdentifier("section1", forIndexPath: indexPath) as! Section1TableViewCell
        self.tableView.rowHeight = 150
        cell.label1.text = "hiiiiii"
        cell.label2.text = "Huiiilllllll"
        return cell

    } else {

        let cell = self.tableView.dequeueReusableCellWithIdentifier("section2", forIndexPath: indexPath) as! Section2TableViewCell
        self.tableView.rowHeight = 60
        cell.label3.text = "llll"
        return cell
    }

}
Chathuranga Silva
quelle
Dies funktioniert, aber allgemeiner können Sie tun:cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Andy Chou
7

Sie können die Höhe von UITableviewCell (in UITableviewController - statische Zellen) mithilfe der folgenden Zeilen aus dem Storyboard abrufen.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   CGFloat height = [super tableView:tableView heightForRowAtIndexPath:indexPath];

    return height;
}
Hiren Panchal
quelle
6

Öffnen Sie das Storyboard in der XML-Ansicht und versuchen Sie, das zu bearbeiten rowHeight Attribut des gewünschten Elements .

Es hat bei mir funktioniert, als ich versucht habe, die benutzerdefinierte Zeilenhöhe für meine prototypisierte Zeile festzulegen. Es funktioniert nicht über den Inspektor, sondern über XML.

Shtirlic
quelle
1
Ich habe mit der rechten Maustaste geklickt und "Öffnen als" -> "Quellcode" ausgewählt. Die rowHeight wurde bereits auf 120 gesetzt. Ich glaube, dass das Storyboard dort einen Fehler aufweist und die benutzerdefinierte Zellenhöhe ignoriert.
Zirinisp
6

Sie können einen Prototyp cellsmit einem Benutzerdefinierten verwenden heightund dann cellForRowAtIndexPath:dessen frame.height.: Aufrufen und zurückgeben .

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView
                    cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;
}
Henrik Hartz
quelle
Das Hinzufügen dieser Methode hat sehr gut funktioniert und behält jetzt alle Anpassungen im Storyboard bei, wie es gehören sollte.
Daspianist
Mit Abstand die beste Lösung
TheJeff
4

Wenn Sie eine statische Zeilenhöhe festlegen möchten, können Sie Folgendes tun:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 120;
}
Victor Palhares
quelle
4

Ich habe kürzlich damit gerungen. Mein Problem waren die oben genannten Lösungen mit demheightForRowAtIndexPath: Methode für iOS 7.1 im Simulator funktionieren würden, aber dann die Ergebnisse durch einfaches Umschalten auf iOS 8.1 völlig durcheinander gebracht haben.

Ich begann mehr über Zellen mit Selbstgröße zu lesen (eingeführt in iOS 8, lesen Sie hier ). Es war offensichtlich, dass die Verwendung von UITableViewAutomaticDimensionin iOS 8 helfen würde. Ich habe versucht, diese Technik zu verwenden, und die Verwendung von heightForRowAtIndexPath:und voila gelöscht. In iOS 8 funktionierte sie jetzt perfekt. Aber iOS 7 war es nicht. Was sollte ich tun? Ich brauchte heightForRowAtIndexPath:für iOS 7 und nicht für iOS 8.

Hier ist meine Lösung (der Kürze halber gekürzt), die sich aus der Antwort @JosephH oben ergibt:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 50.;
    self.tableView.rowHeight = UITableViewAutomaticDimension;

    // ...
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
        return UITableViewAutomaticDimension;

    } else {
        NSString *cellIdentifier = [self reuseIdentifierForCellAtIndexPath:indexPath];
        static NSMutableDictionary *heightCache;
        if (!heightCache)
            heightCache = [[NSMutableDictionary alloc] init];
        NSNumber *cachedHeight = heightCache[cellIdentifier];
        if (cachedHeight)
            return cachedHeight.floatValue;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    CGFloat height = cell.bounds.size.height;
    heightCache[cellIdentifier] = @(height);
    return height;
    }
}

- (NSString *)reuseIdentifierForCellAtIndexPath:(NSIndexPath *)indexPath {
    NSString * reuseIdentifier;
    switch (indexPath.row) {
        case 0:
            reuseIdentifier = EventTitleCellIdentifier;
            break;
        case 2:
            reuseIdentifier = EventDateTimeCellIdentifier;
            break;
        case 4:
            reuseIdentifier = EventContactsCellIdentifier;
            break;
        case 6:
            reuseIdentifier = EventLocationCellIdentifier;
            break;
        case 8:
            reuseIdentifier = NotesCellIdentifier;
            break;
        default:
            reuseIdentifier = SeparatorCellIdentifier;
            break;
    }

    return reuseIdentifier;
}

SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") stammt tatsächlich aus einer Reihe von Makrodefinitionen, die ich verwende und die ich irgendwo gefunden habe (sehr hilfreich). Sie sind definiert als:

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
speby
quelle
2

Das gleiche Problem trat auf, wenn mit Swift 4 an XCode 9 gearbeitet wurde .

Wenn Sie AutoLayout für die UI-Elemente in der Zelle hinzufügen, funktioniert die benutzerdefinierte Zellenzeilenhöhe wie angegeben.

Murari Varma
quelle
1
Hallo, bitte wie hast du das gemacht?
Back Packer
Sie müssen nur einen Einschränkungssatz am unteren Rand der Zelle hinzufügen.
Justin
Wenn ich dies tue und im Storyboard "Automatisch" für die Zellenhöhe auswähle, möchte es alle Höhen im Storyboard auf 44 setzen, obwohl es beim Ausführen korrekt erscheint. Wie kann ich das Storyboard korrekt anzeigen lassen?
David
1

Bei dynamischen Zellen überschreibt die in UITableView festgelegte Zeilenhöhe immer die Zeilenhöhe der einzelnen Zellen. Berechnen Sie einfach die dynamische Höhe, wenn sich der Inhalt in der Zeile befindet.

Aks
quelle
0

Die einzige wirkliche Lösung, die ich finden konnte, ist diese

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = ...; // Instantiate with a "common" method you'll use again in cellForRowAtIndexPath:
    return cell.frame.size.height;
}

Dies funktioniert und erlaubt es, keinen schrecklichen Schalter zu haben / wenn die Logik bereits im StoryBoard dupliziert wird. Ich bin mir nicht sicher über die Leistung, aber ich denke, wenn ich ankommecellForRow: der bereits angekommenen Zelle ankomme, ist es genauso schnell. Natürlich gibt es hier wahrscheinlich Kollateralschäden, aber es sieht so aus, als würde es hier für mich gut funktionieren.

Ich habe dies auch hier gepostet: https://devforums.apple.com/message/772464

EDIT: Ortwin Gentz ​​hat mich daran erinnert, dass heightForRowAtIndexPath:für alle Zellen der TableView aufgerufen wird, nicht nur für die sichtbaren. Klingt logisch, da iOS die Gesamthöhe kennen muss, um die richtigen Bildlaufleisten anzeigen zu können. Dies bedeutet, dass es in kleinen TableViews (z. B. 20 Zellen) wahrscheinlich in Ordnung ist, in einer 1000-Zellen-TableView jedoch vergessen wird.

Auch der vorherige Trick mit XML: Wie der erste Kommentar für mich. Der richtige Wert war bereits da.

StuFF mc
quelle
0

Als Kommentar hinzugefügt, aber als Antwort für die Sichtbarkeit gepostet:

Es scheint auch ein Problem zu sein , wenn Sie zunächst Setup eine Tabellenansicht als „statische Zellen“ und es dann ändern , um „dynamische Prototypen.“ Ich hatte ein Problem, bei dem sogar die Delegatenmethode für heightForRowAtIndexPathignoriert wurde. Ich habe es zuerst gelöst, indem ich das Storyboard-XML direkt bearbeitet und dann die Storyboard-Szene von Grund auf neu erstellt habe, wobei ich von Anfang an dynamische Prototypen verwendet habe.

Eric Goldberg
quelle
0

Da ich über Interface Builder keine Lösung für dieses Problem gefunden habe, habe ich beschlossen, eine programmatische Lösung für das Problem in Swift mit zwei dynamischen Zellen zu veröffentlichen , obwohl in der ersten Frage über Interface Builder nach einer Lösung gefragt wurde. Unabhängig davon denke ich, dass es für die Stack Overflow-Community hilfreich sein könnte:

    import UIKit

    enum SignInUpMenuTableViewControllerCellIdentifier: String {
       case BigButtonCell = "BigButtonCell"
       case LabelCell = "LabelCell"
    }

    class SignInUpMenuTableViewController: UITableViewController {
            let heightCache = [SignInUpMenuTableViewControllerCellIdentifier.BigButtonCell : CGFloat(50),
                              SignInUpMenuTableViewControllerCellIdentifier.LabelCell : CGFloat(115)]

    private func cellIdentifierForIndexPath(indexPath: NSIndexPath) -> SignInUpMenuTableViewControllerCellIdentifier {
        if indexPath.row == 2 {
            return SignInUpMenuTableViewControllerCellIdentifier.LabelCell
        } else {
            return SignInUpMenuTableViewControllerCellIdentifier.BigButtonCell
        }
    }

   override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
       return self.heightCache[self.cellIdentifierForIndexPath(indexPath)]!
   }

   ...

  }
König-Zauberer
quelle
Das ist alles in Ordnung und gut, aber wenn ich den Code nicht falsch verstehe, stützt er sich einfach auf magische Zahlen und ignoriert vollständig den Wert, den Sie in IB für die dynamischen Zellen festgelegt haben, also ... nicht gerade eine Lösung für die Frage von OP
Danny,
0

Sie können auch zu Ihrer Dokumentübersicht gehen und die Tabellenansicht auswählen, in der Ihre Prototypzelle verschachtelt ist. Ändern Sie dann im Größeninspektor die Zeilenhöhe Ihrer Tabellenansicht auf den gewünschten Wert und deaktivieren Sie das Kontrollkästchen Automatisch.

Amin Rezapour
quelle