2015-10-06 8 views
7

Ich habe eine statische UITableView, die 12 Zeilen hat und für 11 Zeilen weiß ich, was die Höhe sein muss.Statische UITableView, mache eine einzelne Zelle mit dynamischer Höhe in Swift

Ich habe ein UILabel, das dynamischen Text hat, der in der 12 Reihe sitzt, wie gehe ich über nur diese eine Zelle, um eine dynamische Höhe basierend auf dem Text in der UILabel zu haben.

Ich habe den folgenden Code innerhalb viewDidLoad versucht, aber es hat nicht funktioniert. Die Reihen blieben auf der gleichen Höhe. Ich habe auch die Linien = 0 für diese UILabel

tableView.estimatedRowHeight = 100.0 
    tableView.rowHeight = UITableViewAutomaticDimension 
+0

Bitte erklären Sie, was Sie mit "es hat nicht funktioniert" gemeint haben. Es ist auch wichtig zu wissen, welche der verwandten Methoden von 'UITableViewDelegate' Sie implementiert haben und wie. –

Antwort

9

Sie dies versucht haben?

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if (indexPath.row < 11) { 
     // Everything starts at 0, so this covers 0-10 
     // Whatever your cell height is 
     return <#fixedCellHeight#> 
    } else { 
     // This is your 12th cell (indexPath.row 11), as we start counting at 0 
     return UITableViewAutomaticDimension 
    } 
} 
+1

Fehlende Rückkehr in Funktion zu erwarten zurückzukehren 'CGFloat' –

+0

ich es geändert um zu if (indexPath.row <11) { return 100 } else { return UITableViewAutomaticDimension } wie seine Arbeits scheint, wie kann ich die oben ändern null statt 100 sein –

1

Versuchen gesetzt:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 
0

Sie können 2-Zelle Prototyp-Zellen für die Tabellenansicht erstellen. Du gibst ihnen 2 verschiedene IDs. Und dann in Ihrem Code Sie diese fonction außer Kraft setzen

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    var cell = UITableViewCell() 

    if indexPath.row < 12 { 
     cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 
    } else { 
     cell = tableView.dequeueReusableCellWithIdentifier("cell12", forIndexPath: indexPath) 
    } 

    return cell 
} 
0

Sie können die dynamische Zelle mit Texthöhe erstellen, dann können Sie die statische und dynamische Zelle sowohl in auf Tabellenansicht gesetzt

Hier Link zur dynamischen Zelle mit Text Wie Zellenhöhe in UITableView dynamisch ändern statische Zelle

0

Hinzufügen zu @Adrian Antwort, wenn Sie statische Zellen verwenden, eine Zelle in dynamische Höhe ändern, und andere, wie sie sind, können Sie es zu diesem bearbeiten.

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

     if indexPath.row == 11 { 
     // This is your 12th cell (indexPath.row 11), as we start counting at 0 
      return UITableViewAutomaticDimension 
     } else { 
      return super.tableView(tableView, heightForRowAtIndexPath: indexPath) 
     } 
    } 
0

Elegantere sein könnte, nur umsetzen, wie vorgeschlagen:

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 

Oder in Objective C:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewAutomaticDimension; 
} 

Aber anstatt der Reihe spezifische Logik, fügen Einschränkungen Ihrer statischen Zelle Inhalt in Storyboard, um die Zeilenhöhen konstant zu halten. Auf diese Weise müssen Sie, wenn Sie Zeilen verschieben oder Inhalte ändern, keinen Code ändern.

Verwandte Themen