2012-12-14 8 views
5

Mam pewne problemy z używaniem układów automatycznych z widokami kontenera (w obu przypadkach: z szablonem widoku widoku używanym z ios5 i prostym widokiem kontenera).(automatyczny układ) widok zawartości kontenera zmienia się, ale subviews nie ma wartości

Mam rodzaj niestandardowego kontrolera Master Detail, mogę zmienić rozmiar lewego kontenera po wykonaniu akcji przez użytkownika, a korelacja odpowiedniego kontrolera musi zostać odpowiednio zmieniona na nowe niewykorzystane spacje.

W przypadku kontrolera "szczegółowego" ustawiam kontroler za pomocą Xib i za pomocą automatycznego układu Mam widok wewnątrz. w formacie wizualnym wyglądałoby to tak:

  • V: | [headerView] [contentView] [footerView] |
  • H: | [headerVieW]
  • H: | [contentView]
  • H: | [footerView]

jest to jedynie przedstawienie na undestand problem.

Jeśli spróbuję zmienić rozmiar ramki kontrolera detail.view, ta strona rozwija się prawidłowo, ale subviews nie.

w metodzie - (void) viewDidLayoutSubviews tego kontrolera Próbowałem ustawić ramki ręcznie i to działa, ale nie jest to właściwe, ponieważ używam automatycznego układu!

Ten problem pojawia się ponownie, jeśli mam ogólny widok i widok podrzędny zawierający widoki obrazów, jeśli zdefiniuję ten widok z Xib przy użyciu autolayout, jeśli w czasie wykonywania zmieni się ramka po skonfigurowaniu widoku podrzędnego (widoki obrazu dla edample) nie zmieniaj rozmiaru.

Ktoś może mi pomóc?

Dzięki!

+0

Czy kiedykolwiek osiągniesz to w dowolnym miejscu? Wygląda na to, że wiele osób ma podobne problemy, ale nie ma rozwiązań, które można znaleźć! – elsurudo

Odpowiedz

1

Opierając się na twoim opisie ograniczeń, myślę, że opisane zachowanie jest dokładnie tym, co kazałeś mu zrobić.

Należy zauważyć, że ograniczenia horyzontalne wymagają, aby widoki były równe z lewą stroną ich superwizja. Nie mówią jednak nic o tym, jak powinny odnosić się do prawej strony o superwizji. W związku z tym zmiana szerokości podglądu nie powoduje niczego; oni po prostu pozostają na równi z lewym rozmiarem i zachowują dowolną szerokość, jaką zapewniają ich wewnętrzne ograniczenia.

Jeśli chcesz, aby widoki zmieniały rozmiar wraz z ich podglądem, musisz dodać ograniczenia po stronie końcowej. Konkretnie, swoje ograniczenia, może wyglądać następująco:

H:|[headerView]| 
H:|[contentView]| 
H:|[footerView]| 

A może chcesz je tylko wtedy, gdy kurczą superview jest zbyt wąski, ale poza tym nie rozciągnąć całą drogę w poprzek. To może to zrobić:

H:|[headerView]-(>=10)-| 
H:|[contentView]-(>=10)-| 
H:|[footerView]-(>=10)-| 

W każdym razie wydaje się, że źródłem problemu jest to, że widoki nie są przywiązane do prawej krawędzi SuperView w żaden sposób, a to nie są związane z jej szerokość w jakikolwiek sposób. Dodanie tych ograniczeń powinno rozwiązać problem.

0

Jeśli Twoje poglądy w twoim formacie wizualnym są pomiędzy "|" (to Twój przypadek)

CGSize fittingSize = [container systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]; 
container.frame = CGRectMake(0, 150, 320, fittingSize.height); 
Powiązane problemy