Mam uitableview, który ładuje dość duże obrazy w każdej komórce, a wysokości komórek różnią się w zależności od rozmiaru obrazu. Wydajność przewijania jest przyzwoita, ale czasami może być nierówna.
Znalazłem te wskazówki, które znalazłem na blogu FieryRobot:
glassy-scrolling-with-uitableview
more-glassy-scrolling-with-uitableview
Czy ktoś ma jakieś wskazówki dotyczące poprawy wydajności przewijania uitableview?
Odpowiedzi:
UITableViewCell
,drawRect:
jeśli to możliwe, unikaj podglądów podrzędnych za wszelką cenę (lub jeśli potrzebujesz standardowej funkcji dostępności, widoku zawartościdrawRect:
)UITableViewCell
nieprzezroczystą warstwę (to samo dotyczy widoku zawartości, jeśli taki masz)UITableView
przykładach / dokumentacjiUIImage
sźródło
UITableViewCell
, nie używaj końcówki, zamiast tego napisz ją w kodzie. To znacznie szybsze niż ładowanie plików Nib.źródło
Deweloper stojący za Tweetie obszernie o tym napisał i ma kod, który pokazuje, jak to zostało zrobione dla tej aplikacji. Zasadniczo opowiada się za jednym niestandardowym widokiem na komórkę tabeli i rysowaniem go ręcznie (zamiast między innymi przeglądać za pomocą Interface Builder).
fast-scrolling-in-tweetie-with-uitableview
Ponadto firma Apple zaktualizowała własny przykładowy kod dla TableView w swoich samouczkach TableViewSuite (może w odpowiedzi na to?)
TableViewSuite
źródło
Najlepszy zabójca wydajności w przewijaniu UITableView polega na rysowaniu cieni na dowolnej warstwie widoku komórki, więc jeśli wydajność przewijania ma znaczenie, nie rób cieni, chyba że w zasadzie nie spowalnia to głównego wątku.
pomyślałem, że trzeba to powiedzieć, ponieważ żadna z zaakceptowanych odpowiedzi nie wspomina o cieniach i warstwach. : +)
źródło
Każdy problem z
UITableView
wydajnością przewijania można rozwiązać za pomocą technik opisanych już w innych odpowiedziach. Jednak często powolne działanie jest spowodowane przez coś z natury błędnego lub powtarzającego się.Fakt, że
UITableView
ponownie wykorzystuje komórki oraz fakt, że każda komórka może potrzebować własnego obrazu - razem komplikuje rozwiązanie. Z ogólnego sposobu rozwiązania tego problemu podsumowuję rzeczy, którymi należy się zająć:[tableView reloaddata]
cellForRowAtIndexPath
umieść kod, który ustawi dane (tekst) z prawidłowego obiektu modelu danych tablicy.Aby uniknąć problemów, zapoznaj się z tym samouczkiem dotyczącym leniwego ładowania obrazów w widoku tabeli.
źródło