2016-03-21 8 views
6

Projekt, w którym zacząłem pomagać, nie korzystał wcześniej z automatycznego układu i aktualizuję go, aby korzystać z automatycznego układu i klas wielkości. W aplikacji jest przyzwoity kod manipulacji klatkami (np. Bezpośrednio ustawiając ramkę zamiast zmieniać stałe więzów) i zastanawiam się, jak wpływa to na widok, który został skonfigurowany z więzami Auto Layout.Jeśli widok jest ustawiony w IB z funkcją automatycznego układu, co się stanie, jeśli spróbujesz programowo zmienić jego ramkę?

Pracuję nad wyeliminowaniem zmieniających ramkę fragmentów kodu i zmianą w celu aktualizacji stałych ograniczeń tam, gdzie jest to potrzebne, ale ponieważ nie jestem w 100% zaznajomiony z działaniem każdego fragmentu kodu, to ". d być pomocne w lepszym zrozumieniu, w jaki sposób układ automatyczny i zakodowane zmiany ramek mogą wpływać na siebie nawzajem, więc jeśli widok nie pojawi się poprawnie w czasie wykonywania, mogę lepiej określić, czy jest to coś, co skonfigurowałem, czy może jakiś kawałek starszego kodu gdzieś to trzeba znaleźć i zaktualizować.

+2

Zazwyczaj zmiana będzie działać do następnego układu, gdy ramka zostanie ponownie ustawiona na ramkę zdefiniowaną przez wiązania. Czasami układ odbywa się natychmiast, więc zmiana nie jest widoczna. – Sulthan

+0

jeśli wykonujesz wiele manipulacji ramkami na widoku, który używa autolayout może to być bałagan. Miałem kiedyś takie zadanie i większość kodu nic nie robiła (próbując zmienić ramkę), środowisko wykonawcze ignorowało większość operacji na ramkach. – azimov

+0

@Sulthan, to ma wiele sensu, kiedy myślę o niektórych dziwnych rezultatach, które dostałem czasem. Dzięki! – bluewraith

Odpowiedz

8

To bardzo proste. Musisz tylko zrozumieć, jaki układ automatyczny to.

Oto jak to działa. Ograniczenia to tylko lista instrukcji; nie robią same z siebie niczego. Jest komunikat systemowy layoutSubviews, który jest wysyłany w chwilach, w których nie masz kontroli - więc powinieneś wyobrazić sobie, że może on zostać wysłany w dowolnym momencie. Kiedy faktycznie wysłano, ograniczenia są konsultowane i przestrzegane (wykonując dokładnie to, co zrobiłbyś - to znaczy, środowisko wykonawcze ustawia frame lub bounds i center każdego widoku).

Tak więc, jesteś wolny, aby zmienić frame z widoku, ale należy pamiętać, że jeśli layoutSubviews są wysyłane i ograniczenia zgadzają się z frame które można ustawić, widok będzie skok z powrotem do miejsca, gdzie ograniczenia powiedzieć umieścić to.

+0

Doskonale, dziękuję! To wyjaśnia niektóre z pobieżnych wyników, które otrzymywałem w niektórych przypadkach. – bluewraith

Powiązane problemy