2016-07-05 181 views
0

我做的部件。我需要用動畫改變細胞高度。當點擊「顯示更多」時,去額外的控制。 enter image description hereUITableView單元格高度動畫

我寫了這個代碼

 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() 
       }) 

      } 
     } 
    } 
} 

但它不工作的順利開展。它會劇烈地抽動和抽動。我怎樣才能讓這個工作順利進行,例如,在Apple的天氣部件中?

回答

0

因爲您只發布了部分代碼,所以我無法確定是什麼問題。但我可以建議做幾個檢查

  1. 您是否爲UITableView設置了自定義單元格? AtableView.rowHeight = UITableViewAutomaticDimension;
  2. 你有沒有添加約束(favoriteConstraint)細胞的內容查看

此外,當動畫約束改變你不需要去改變它的動畫閉包內。

標準的代碼看起來像

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

而且你不需要來包裝方法調用。這必須是確定:

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

是的,所有加入 倍率FUNC viewDidLoad中(){ super.viewDidLoad() ledControllers = readLED() self.tableView.estimatedRowHeight = 300 self.tableView.rowHeight = UITableViewAutomaticDimension } 我錄製了一段視頻以使其更清晰。第一個單元展開,然後纔開始動畫。我希望它很像天氣小工具 https://youtu.be/f4D7NnoyWrQ P.S. Судяпоникувыговоритепорусски? – MacSergey