Gdy użytkownik pisze, pobieram wyniki (tekst), przechodząc przez lokalny wykres słów w wątku tła. Każde naciśnięcie klawisza anuluje poprzednią operację. Jeśli operacja zostanie zakończona, źródło danych zostanie zaktualizowane, a reloadData zostanie wywołany w głównym wątku. Działa to świetnie i jest bardzo szybkie (tak szybko, jak użytkownik może pisać), nawet gdy zwrócono dziesiątki tysięcy wyników.Jak poprawić wydajność UICollectionView przy niestandardowych rozmiarach komórek?
Aby dostosować rozmiar każdej komórki widoku kolekcji, zaimplementowałem sizeForItemAtIndexPath dla delegata UICollectionViewDelegateFlowLayout. Niestety, powoduje to małe, ale zauważalne opóźnienie, gdy użytkownik wpisze. Aby upewnić się, że czas nie został utracony w logice obliczania wielkości, próbowałem po prostu zwrócić ustalony rozmiar, ale nadal zabijał wydajność. Jestem tym zaskoczony, ponieważ w danym momencie na ekranie jest tylko około 120 komórek. Podczas komentowania tej metody czas reakcji jest natychmiastowy, nawet w przypadku bardzo dużych zestawów danych.
Wszelkie pomysły na poprawę wydajności UICollectionView z niestandardowymi rozmiarami komórek?
Dzięki
dodatkowe wyjaśnienie ...
Program powraca wszystkich możliwych słów z podanego zestawu liter następnie sortuje wg oceny lub alfabetycznie etc. Jako typów użytkowników, całkowita liczba słów idzie w górę szybko (wykładniczo, jeśli wprowadzono wiele symboli wieloznacznych). Słowa zmieniają się podczas wpisywania, więc szerokość komórek jest odpowiednio aktualizowana i zawijana do następnego wiersza obsługiwanego przez układ przepływu.
Problem wydaje się być liczbą komórek wyświetlanych na ekranie w danym momencie. W sizeForItemAtIndexPath, jeśli po prostu zwracam duży rozmiar, w którym widoczna jest tylko jedna lub dwie komórki, aktualizacja jest bardzo szybka; jednak jeśli zwrócę rozmiar, który pasuje do tekstu, kończę z ponad 100 widocznymi komórkami i pojawia się opóźnienie. Jeśli skomentuję sizeForItemAtIndexPath i po prostu użyję komórki o ustalonym rozmiarze, jest to szybkie, ale nie o to mi chodzi.
Czy chcesz, aby komórki zmieniały rozmiar podczas pisania lub po prostu miały ustalone niestandardowe rozmiary? –
Próbujesz zrozumieć, dlaczego nazywasz 'reloadData' zamiast tylko aktualizować komórki na ekranie. –
Dodatkowe wyjaśnienie dodane powyżej ... Szerokość komórek zmienia się zgodnie z typem użytkownika. Jak mam to zrobić bez wywoływania reloadData? – Bama91