2015-10-26 21 views
7

ja przeładunkowego sekcję Tableview użyciu tego kodu -Odśwież sekcja tableview bez przewijania lub animacji

self.tableView.beginUpdates() 
       self.tableView.reloadSections(NSIndexSet(index: 1), withRowAnimation: UITableViewRowAnimation.None) 
       self.tableView.endUpdates() 

Nadal wymiana wierszy jest animowany i widok tabeli przewija się do góry.

Jak mogę się upewnić, że żadna animacja nie zostanie zastosowana do przeładowania sekcji + uniemożliwi przewijanie widoku tabeli.

Dzięki

Odpowiedz

7

Spróbuj tego:

UIView.setAnimationsEnabled(false) 
    self.tableView.beginUpdates() 
    self.tableView.reloadSections(NSIndexSet(index: 1) as IndexSet, with: UITableViewRowAnimation.none) 
    self.tableView.endUpdates() 
+7

nie działa dla mnie. – JohnVanDijk

+0

Nie działa dla mnie –

+1

Jaki jest sens UITableViewRowAnimation.none? –

19

Aby uniknąć przewijania i animacji, to zrobić:

 UIView.performWithoutAnimation { 
      let loc = tableView.contentOffset 
      self.tableView.reloadRows(at: [indexPath], with: .none) 
      tableView.contentOffset = loc 
     } 
+0

Działa to dla mnie z iOS 9 –

+1

Działa na mnie na iOS9. Niesamowita technika! Thx – Mikael

+0

Dokumenty mówią .none używaj domyślnej animacji, ale z tym kodem zaktualizowane wiersze nie są animowane. Dzięki. – user3057944

7

Swift 4:

Właściwie najlepszym sposobem na zapobiec szalonej animacji podczas przewijania lub rozwijania/zwijania cel ls to:

UIView.performWithoutAnimation { 
     self.tableView.reloadRows(at: [indexPath], with: .none) 
} 
+1

To zadziałało, a nie tylko na Swift 4, ale także w wersji 3.2. Ten interfejs API wydaje się być dostępny od iOS 7.0 Dziękuję! – iPav

+0

Można pominąć 'self' w wywołaniu' tableView.reloadRows', aby kod był mniej czytelny. –

1

Żadna z podanych odpowiedzi nie sprawdziła się u mnie. Oto rozwiązanie znalazłem, mam nadzieję, że będzie użyteczny dla kogoś

Swift 4:

let lastScrollOffset = tableView.contentOffset 

tableView.beginUpdates() 
tableView.reloadSections(IndexSet(integer: 1), with: .none) 
tableView.endUpdates() 

tableView.layer.removeAllAnimations() 
tableView.setContentOffset(lastScrollOffset, animated: false) 
Powiązane problemy