2013-05-20 13 views
15

Robię leniwe ładowanie dla mojego UITableView, więc próbuję przeładować poszczególne wiersze, gdy obrazy są aktualizowane. Mam jednak dziwny problem.UITableView reloadSection i reloadRowsAtIndexPaths powoduje dziwną animację

Kiedy zadzwonić,

[self.bubbleTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone]; 

LUB

[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone]; 

Kiedy konkretnie powiedzieć bez animacji to wciąż ożywia i animacja jest podejmowanie całą komórkę i szybko kurczy się do normalnego przekątna obrazu . Ponadto, jeśli zmienię ją na dowolną inną animację, wykona tę samą animację bez względu na ustawienie.

Jeśli skomentuję jedną z tych opcji i po prostu użyję reloadData, to działa dobrze, ale wolałbym nie robić ponownie resloadData ze względu na wydajność reupdating komórek, które nie wymagają aktualizacji.

Dzięki!

+0

sam problem tutaj. rozwiązałeś to? –

Odpowiedz

36

Here was an answer

[UIView setAnimationsEnabled:NO]; 
[self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone]; 
[UIView setAnimationsEnabled:YES]; 

To działa na mnie.

UPD. Podobnie jest z bloku przez @ Şafak-Gezer

[UIView performWithoutAnimation:^{ 
    [self.bubbleTableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone]; 
}]; 

SWIFT

UIView.performWithoutAnimation { 
      self.bubbleTableView.reloadSections(NSIndexSet(index: indexPath.section), withRowAnimation: UITableViewRowAnimation.None) 
     } 
0

Zastosowanie cellForRowAtIndexPath: tylko zaktualizować komórki jesteś zainteresowany.

+0

Nie mam problemów z aktualizowaniem tych, które mnie interesują, ale mam problemy z aktualizowaniem konkretnych komórek bez tej dziwnej animacji. – Alan

+0

Ale jeśli otrzymasz komórkę (z cellForRowAtIndexPath), możesz zaktualizować obraz w komórce. Nie będzie animacji, ponieważ nie wywołasz żadnych metod przeładowywania *. – Markus

+0

hmm .. Aktualizuję obraz w komórce, ale problem polega na tym, że obraz nie aktualizuje się do czasu ponownego załadowania danych lub gdy komórka zniknie z ekranu i wróci. – Alan

-1

znalazłem to dzieje się ze mną na iOS Simulator. Po kilku przeładowaniach działało normalnie bez animacji. To może być błąd w symulatorze.

+1

to też dzieje się na urządzeniu –

7

Poniżej metody pracował dla mnie: (iOS 7 i lepiej)

[UIView performWithoutAnimation:^{ 
    [tableView reloadSections:[NSIndexSet indexSetWithIndex:[indexPath section]] withRowAnimation:UITableViewRowAnimationNone]; 
}]; 
Powiązane problemy