SzacowanaHeightForRowAtIndexPath może w rzeczywistości zmienić ostateczną „poprawną” wysokość rzędu?

Właśnie odkryłem zdumiewający problem lub zachowanie sprzeczne z intuicją podczas korzystania z EstimateHeightForRowAtIndexPath

(1) Mój stół ma bardzo różne wysokości rzędów. Ostateczne wyniki mogą wahać się od 111 do około 400.

(2) Absolutnie doskonale obliczam wysokość każdego rzędu. Mam je pod ręką w tablicy, to znaczy w pamięci podręcznej.

{Zwróć uwagę, że to jest dokładnie to, co obecnie zalecają inżynierowie Apple ... przykład, punkt 5 ..Korzystanie z Auto Layout w UITableView dla dynamicznych układów komórek i zmiennych wysokości rzędów}

(3) Gdy wysokoscForRowAtIndexPath prosi o wysokosc, daję jej absolutnie prawidłową wysokość.

(4) KIEDY buduję komórkę, rzeczywiście, buduję ją dokładnie do odpowiedniej wysokości (jak w (2) i (3)).

{Uwaga - oczywiście jest to system iOS, który ostatecznie zwiększa wysokość komórki, a nie „ja”.}

TO WSZYSTKIE DZIAŁA IDEALNIE.

tzn. każda komórka jest zbudowana przez iOS dokładnie na wysokości podanej w heightForRowAtIndexPath.

Teraz dodam kod ...

-(CGFloat)tableView:(UITableView *)tableView
    estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 120;
}

W FAKTACH STÓŁ NIE DZIAŁA .................. WYSOKOŚĆ WIERSZA STAJE SIĘ LOSOWO !!!

CZY KTÓRY WIDZIAŁ TO NIESAMOWITE ZACHOWANIE?

Zrobiłem różne testy, aby spróbować określić związek między tym, co robi piekło szacowanaHeightForRowAtIndexPath. Na początku myślałem, że może to zapewnić niższą granicę wysokości. Więc, 150 .. nawet moje mniejsze komórki miałyby nieprawidłowo 150 wysokości. Ale tak nie jest.

Myślę, że MOŻE to zrobić w ten sposób: powiedzmy, że wartość SzacowanaWartośćFormaWartościData wynosi 150. Czasami używa 150 dla wierszy, które (w rzeczywistości () okazują się być tym rozmiarem lub mniejszym, ale czasami dotyczą rzeczywistego rozmiaru z heightForRowAtIndexPath).

Z drugiej strony, jeśli wprowadzisz wartość szacowaniaHeightForRowAtIndexPath, która jest mniejsza niż kiedykolwiek będzie istnieć (powiedzmy 100 w moim przykładzie), to w zasadzie „całkowicie nie działa”, po prostu dostajesz to, co wydaje się być przypadkowymi wysokościami komórki.

bardzo wysokie komórki wydają się działać poprawnie, być może coś w stylu „jeśli wysokość z heightForRowAtIndexPath jest dwukrotnie większa niż szacowana, to używa rzeczywistej wysokości”

Aby było jasne, wydaje się, że nigdy nie czyni komórki zbyt małą, ale często czyni je zbyt dużymi.

Żeby było jasne, jestemnie używając autolayout, jest to typ komórki, którą musisz zbudować. (Obawiam się, że nie mam pojęcia, jak to idzie z autolayoutem.) To jest tylko Xcode5 / iOS7 +.

questionAnswers(2)

yourAnswerToTheQuestion