2013-12-13 18 views
11

UIView „s updateConstraints metoda ma UWAGA:Jakie operacje unieważnią więzy?

Nie musi unieważnić jakiekolwiek ograniczenia w ramach swojej fazie aktualizacji ograniczenie . Nie można również wywoływać fazy układania lub rysowania jako części aktualizacji wiązań.

Nie jest dla mnie jasne, co mogłoby podważyć ograniczenia.

Odpowiedz

7

Przez niektóre eksperymenty odkryłem, że po prostu dodawanie, usuwanie lub edytowanie wiązań nie będzie automatycznie wywoływane przez setNeedsUpdateConstraints. W rzeczywistości nie mogę znaleźć sposobu, aby automatycznie uzyskać wywołanie setNeedsUpdateConstraints przez system. Wraz z moją obserwacją, że updateConstraints nie zostanie wywołany bez pierwszego wywołania setNeedsUpdateConstraints lub invalidateIntrinsicContentSize, myślę, że jedynym znaczącym sposobem na unieważnić wszelkie ograniczenia jest przez wywołanie setNeedsUpdateConstraints lub invalidateIntrinsicContentSize mnie.Zatem implikacja noty w poście pytanie brzmi:

Nie musi wywołać [setNeedsUpdateConstraints własny] lub [self invalidateIntrinsicContentSize] w updateConstraints.

+1

, który jest celem setNeedsUpdateConstraints. To nie jest metoda wywoływana przez system. Jest to metoda dostarczona programistom, aby powiadomić środowisko wykonawcze Auto Layout, że ograniczenia wymagają aktualizacji. Środowisko wykonawcze zrobi to we właściwym czasie. Jest dostarczany, ponieważ nie powinieneś bezpośrednio wywoływać funkcji updateConstraints. –

1

Doskonałe pytanie!

Richard Warren Obejmuje to w swoim blogu samouczek UNDERSTANDING AUTO LAYOUT:

Jeśli chcemy unieważnić ograniczeń rzutem, powinniśmy usunięcia dawne ograniczenia, a następnie zadzwonić setNeedsUpdateConstraints. Nasze niestandardowe metody updateConstraints lub updateViewonity mogą następnie dostarczyć nowe ograniczenia.

Ograniczeń nie należy podawać w sposób niekwalifikujący w metodzie updateConstraints. Jest to wyraźnie określone w UIView Class Reference:

widoki niestandardowe, które ustanowione ograniczenia sami powinni robić tak przez nadrzędnymi tej metody. Gdy niestandardowy widok zauważa, że ​​zmiana została wprowadzona w widoku, który unieważnia jedno z jego więzów, powinien natychmiast usunąć to ograniczenie, a następnie wywołać setNeedsUpdateConstraints, aby zauważyć, że ograniczenia muszą zostać zaktualizowane. Przed wykonaniem układu zostanie użyta implementacja updateConstraints , umożliwiająca sprawdzenie, czy wszystkie niezbędne ograniczenia dla zawartości są na miejscu w czasie, gdy właściwości niestandardowego widoku nie zmieniają się.

Nie można unieważnić żadnych ograniczeń jako części ograniczenia faza aktualizacji. Nie można także wywoływać fazy układania lub rysowania jako części aktualizacji wiązań.

Różni się od równoważnika kontrolera widoku updateViewConstraints. Nie ma podobnej klauzuli, aby nie unieważniać ograniczeń w tej metodzie. Z pewnością Erica Sadun'sbook pokazuje przykładowy kod, który właśnie to robi.

+3

'updateConstraints' służy do aktualizacji wiązań, prawda? Czy usunięcie więzów nie jest jednym z uaktualnień? Czy mogę usunąć ograniczenia w 'updateConstraints'? – an0

+0

dodano do odpowiedzi z wytycznymi Apple, jak określono w dokumentach UIView powyżej –