Mój UITableView
ma kilka komórek wielokrotnego użytku, a po dotknięciu jednego z nich, przenosi mnie do innego kontrolera widoku (poprzez push pushue) pokazując szczegóły tej komórki (powiedzmy jest to przedmiot, więc pokazuje szczegóły dotyczące przedmiotu - nazwy, ceny, zdjęcia itp.). Po uruchomieniu tego kontrolera widoku (poprzez naciśnięcie przycisku wstecz), UITableView
ma dziwne zachowanie:UITableViewController dziwne zachowanie po pojawieniu kontrolera widoku
a) jeśli jest przewinięty do samego końca, przewinie się automatycznie w górę (około 50 punktów), pozostawiając ostatnią komórkę ledwo widoczną, więc muszę ponownie przewinąć w dół. Moja komórka ma 60 punktów wzrostu.
b) pasek przewijania zawsze pokazuje się, a następnie znika, wskazując, że coś się porusza, że UITableView
(chociaż jeśli nie przewinie się do dołu, zawartość nie będzie się poruszać automatycznie).
Zdarza się to w wielu numerach UITableView
, które mam w mojej aplikacji. Nie zmuszam do ponownego załadowania widoku tabeli w viewWillAppear, więc nie rozumiem, co się dzieje. Moja zawartość jest statyczna po załadowaniu z serwera (chyba że użytkownik ją zmieni, a następnie zostanie wykonane ponowne ładowanie). Ale po prostu pokazywanie szczegółów przedmiotu i wstawianie tego VC niczego nie zmienia w widoku tabeli.
Edycja: Okej, doszedłem do tego, o co chodzi: ukrywam UIToolbar
, kiedy pcham ten segue. Jeśli utrzymam ją zawsze widoczną (której nie chcę), to nadal pokazuje paski przewijania animujące się po pojawieniu się w widoku tabeli, ale nie przewija widoku tabeli, jeśli jest w kilku ostatnich wierszach.
Czy mógłbyś wyjaśnić bardziej szczegółowo, dlaczego tak się dzieje? A może ktoś. – Krtko
To niesamowite ... rozwiązało podobny problem ... Problem polega na tym, że za każdym razem, gdy nawigujesz z powrotem z kontrolera view, przesunięcie przewijania widoku stołu zmienia się odpowiednio. Tak więc musisz przechwycić wartość contentoffset w właściwości wewnątrz metody prePareForSegue: (tj. Przed nawigacją), a następnie sprawdzić, czy w tej samej klasie wewnątrz metody viewWillAppear:. A jeśli zostanie zmieniony, ustaw wartość właściwości scrolloffset na zero –