tl; dr: Poszukaj wartości rzeczywistej wysokości drastycznie odmiennych niż co szacuje. Lub rzeczywiste wartości, które są ujemne lub 0
.
Właśnie spędziłem kilka minut na debugowaniu tego wyjątku ograniczenia. Mam UITableView
z komórkami, nagłówkami sekcji i stopkami sekcji. Każdy z nich miał zdefiniowane komunikaty iOS 7 estimatedHeightFor
, zwracając wartość static const
. Usunąłem komórki, nagłówki i stopki, po jednym na raz, aż stwierdziłem, że problem pochodzi ze stopki (nie ważne, jeśli nie masz stopek, przeczytaj dalej).
Gdybym wyeliminowane estimatedHeightForFooterInSection:
wyjątek zniknął. W moim heightForFooterInSection:
istnieje jedna ścieżka, w której wysokość stopki będzie wynosić 0
. Po przywróceniu wiadomości estimatedHeight
i usunięciu ścieżki kodu dla faktycznej wysokości 0
, wyjątek również zniknął. Zastąpiłem 0
z 22
i zmniejszyłem tę wartość aż do 12, zanim ponownie pojawił się wyjątek.
Niezależnie, muszę wysokość stopki być 0
(wrócę nil
z viewForFooterInSection:
w tym przypadku) i chcę, aby być w stanie oszacować wysokość (popieram tekst dynamiczny). Moim rozwiązaniem było uwzględnienie ścieżki kodu, która dałaby mi 0
wysokość w. Po dodaniu tego wyjątek odszedł.
+1 dla numeru 4. FWIW ten wyjątek ograniczenia występuje w iOS 7, ale nie w 8. –
@RichardShin Dzięki za notatkę. Zaktualizowałem swoją odpowiedź, aby powiedzieć, że funkcjonalność bardzo się zmieniła w systemie iOS 8. –
Drugi przypadek to rzeczywisty problem, aż do systemu iOS 10 włącznie. Zostało to naprawione w iOS 11. Szybki przykład: https://github.com/OlesyaS/UITableView-ios10-crash/blob/master/table/ViewController.m –