2016-07-05 2 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) в клетки contentView

Также при анимации ограничения изменения вам не нужно, чтобы изменить его внутри закрытия анимации.

Стандартный код выглядит

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

Да, все это добавило переопределение функ viewDidLoad() { super.viewDidLoad() ledControllers = readLED() self.tableView.estimatedRowHeight = 300 self.tableView.rowHeight = UITableViewAutomaticDimension } Я записал видео, чтобы сделать его более четким. первая ячейка расширяется, и только тогда начинается анимация. Я хочу, чтобы это было похоже на погодный виджет https://youtu.be/f4D7NnoyWrQ P.S. Судя по нику вы говорите по-русски? – MacSergey

Смежные вопросы