2016-08-29 6 views
0

Ich habe eine UITableView in einem normalen ViewController und ich möchte die gesamte Höhe der Tabellenansicht anpassen.Größe ändern TableView Height nach

Ich erstellte die Tabellenansicht über Storyboard, und ich lade Daten von einer API in meinem ViewDidLoad. Ich habe die Zellen in der typischen Tableview-Methode eingerichtet.

override func viewDidLoad() { 
    self.loadPerformers() 
    setupTableView(performersTableView) 
} 

func setupTableView(tableView: UITableView) { 
    tableView.dataSource = self 
    tableView.delegate = self 
    tableView.estimatedRowHeight = 90 
    tableView.rowHeight = UITableViewAutomaticDimension 
} 

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

     if tableView == self.performersTableView { 
      let performerCell = tableView.dequeueReusableCellWithIdentifier("PerformerCell", forIndexPath: indexPath) as! PerformersTableViewCell 
      let performer = self.performersArray[indexPath.row] 
      performerCell.performerPic.image = getPerformerImage(performer.english_name) 
      performerCell.performerName.text = performer.english_name + " " + performer.japanese_name 
      cell = performerCell 
    } 
    return cell! 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    var count:Int? 

    tableView.separatorStyle = UITableViewCellSeparatorStyle.None 
    tableView.separatorColor = UIColor.clearColor() 
    tableView.allowsSelection = false 

    if tableView == self.performersTableView { 
     count = self.performersArray.count 
    } 

    return count! 

} 

Das Problem, das ich habe, ist die Tabellenansicht bleibt die gleiche Höhe nach dem Laden der Daten. Unten lade ich vier Elemente, aber es zeigt nur 2. Die Tabellenansichtshöhe ändert sich nicht.

enter image description here

Ich habe ein paar Dinge ausprobiert, unter ihnen ist die Höhe des Tableview Rahmen in der viewWillAppear Wechsel:

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    let newHeight = self.performersTableView.rowHeight * CGFloat(self.numberOfPerformers) 

    self.performersTableView.frame = CGRectMake(performersTableView.frame.origin.x, performersTableView.frame.origin.y, 
     performersTableView.frame.size.width, newHeight) 
} 

Dies tut jedoch nichts, so bin ich Missverständnis etwas in der Renderprozess. Wie kann ich den Tisch mit meiner gewünschten Höhe erneut anzeigen?

+0

Ist die Tabellenansicht in einem Storyboard/Xib erstellt? – Lahav

+0

Haben Sie numberOfRowsInSection auf self.performersArray.count gesetzt? –

+0

zeigen, was Sie erreichen möchten, möchten Sie die Tabellenansicht Höhe basierend auf der Anzahl der Zeile ändern? oder wollen Sie einfach aussehen wie Design, indem Sie etwas Höhe erhöhen? – Tj3n

Antwort

1

Ich habe 2 Lösungen für Ihr Problem:

  1. Wenn Sie Höhe von Tableview auf einer Tabellen- Zellen basierend festlegen möchten. so zuerst, wenn Sie erhalten Daten vom Server Ihre Tableview neu laden und nach Tableview Neuladen werden Sie Inhalt Höhe gefüllt Tableview mit diesem Code erhalten:

    self.performersTableView.contentSize.height 
    

    dann diese Höhe als Tableview Rahmen gesetzt.

  2. Im Design setzte fix Höhe von Tableview und setzte Bezug von Zwang und nach Tableview Nachladen:

    self.performersTableViewHeightReference.constant = self.performersTableView.contentSize.height 
    

Ich hoffe, das Ihnen hilft.

0
[self.theTableView setNeedsLayout]; 
[self.theTableView layoutIfNeeded]; 

Fügen Sie diesen Code in Ihre setupTableView und numberOfRowsInSection Zähldaten ist. Und wenn Sie Zelle auch nach Inhalt schreiben möchten, schreiben Sie Code in cellForRowAtIndexpath:

Verwandte Themen