2016-07-05 14 views
0

Ich mache Widget. Ich muss die Zellenhöhe mit Animation ändern. Wenn Sie auf "Mehr anzeigen" klicken, gehen Sie auf zusätzliche Steuerelemente. enter image description hereUITableView Zelle Höhe Animation

Ich schrieb diesen Code

 tableView.beginUpdates() 
     showModes(alpha: 1, duration: 0.2, delay: 0.1) 
     tableView.endUpdates() 

func showModes(alpha: CGFloat, duration: CGFloat, delay: CGFloat) { 
    if tableView.numberOfRows(inSection: 0) != 0 { 
     for i in 0...tableView.numberOfRows(inSection: 0)-1 { 
      let indexPath = IndexPath(row: i, section: 0) 
      if let cell = tableView.cellForRow(at: indexPath) as? WidgetCell { 
       UIView.animate(withDuration: TimeInterval(duration), delay: TimeInterval(delay) ,animations: { 
        if alpha == 0 { 
         cell.favoriteConstraint.constant = -45 
        } else { 
         cell.favoriteConstraint.constant = 10 
        } 
        cell.favoriteMode.alpha = alpha 
        self.tableView.layoutIfNeeded() 
       }) 

      } 
     } 
    } 
} 

Aber es reibungslos funktioniert nicht. es zuckt dramatisch auf und ab. Wie bekomme ich das zum Beispiel im Wetter-Widget von Apple flüssig?

Antwort

0

Ich kann nicht erkennen, was ein Problem ist, weil Sie nur einen Teil Ihres Codes veröffentlicht haben. Aber ich kann vorschlagen, mehrere Überprüfungen zu machen

  1. Haben Sie Self-Sizing-Zellen für UITableView? AtableView.rowHeight = UITableViewAutomaticDimension;
  2. Hast du hinzugefügt Constraint (favoriteConstraint) zu Zelle content

Auch wenn Zwang Animieren Änderungen, die Sie nicht brauchen, es innerhalb Animation Schließung zu ändern.

Der Standard-Code sieht aus wie

cell.favoriteConstraint.constant = newValue 
    UIView.animateWithDuration(0.3) { 
    cell.contentView.layoutIfNeeded() 
} 

Sie auch nicht Ihren Methodenaufruf wickeln müssen. Dies muss in Ordnung sein:

showModes(alpha: 1, duration: 0.2, delay: 0.1) 
tableView.beginUpdates()  
tableView.endUpdates() 
+0

Ja, es ist alles hinzugefügt Überschreibung func viewDidLoad() { super.viewDidLoad() ledControllers = readLED() self.tableView.estimatedRowHeight = 300 self.tableView.rowHeight = UITableViewAutomaticDimension } Ich habe ein Video aufgenommen, um es klarer zu machen. Die erste Zelle wird erweitert, und erst dann beginnt die Animation. Ich wünschte, dass es war wie ein Wetter Widget https://youtu.be/f4D7NnoyWrQ P.S. Судя по нику вы говорите по русски? – MacSergey