2015-03-06 16 views
9

Na iOS, czy konieczne jest wykonanie jakichkolwiek wywołań interfejsu API (takich jak setNeedsLayout lub layoutIfNeeded) po programowej zmianie stałej ograniczenia? W moim przypadku użycia nie jestem zainteresowany animacją zmiany. Wierzę, że są pewne błędy (np .: this one), gdzie wywoływanie tych funkcji jest obejściem problemu. Ale poza tym przypadkiem nie musiałem ich wywoływać w moim kodzie. Czy to przypadkiem działa przypadkowo, czy też istnieje ostateczne źródło, które wspomina, co zrobić przy zmianie stałych ograniczeń?setNeedsLayout lub layoutIfNeeded konieczne po zmianie stałej ograniczenia?

Kilka odpowiedzi SO (here i here) mówi, że ustawienie stałej powinno wystarczyć, ale bez odniesienia do supporsu.

W przewodniku układu iOS Auto Layout dla systemu Apple nie ma nic na ten temat, poza numerem animation block. Kakao Auto Layout Release Notes mówi, że wywoływanie setNeedsLayout jest zbędne, chyba że zastąpisz także layout w swoim widoku niestandardowym. Jednak ten dokument wydaje się raczej specyficzny dla OSX.

Odpowiedz

0

Aby natychmiast uzyskać poprawne ujęcie, należy wywołać te interfejsy API ręcznie. (Pobierz ramkę początku/końca animacji) lub nie musimy ręcznie wywoływać tych interfejsów API.

Używam szkieletu MASConstraint i nigdy nie wywołuję tych interfejsów API.

Nie jestem pewien, czy jest to konieczne, gdy dodajesz/usuwasz więzy, ale nie aktualizujesz ograniczenia. :(

0

Tak, konieczne jest, aby zadzwonić setNeedsLayout po zmianie constant o ograniczenie układu, jak sama ta zmiana nie liczy się jako unieważnienia układu.

+0

Niestety nie mogę znaleźć te informacje w Dzienniku dokumentacja jeszcze. – fabb