2016-07-18 35 views
5

This can't be impossible to dosizeThatFits na widoku z ograniczeniami (automatyczny układ widok wewnątrz widoku układu ramek)

Zobacz układy A To subviews autorstwa obliczania i ustawiania ich klatek layoutSubviews.

Widok B używa wiązań do układu jego podobrazów.

Widok A zawiera liczbę instancji widoku B.

Widok A musi znać rozmiar swoich podobrazów, gdy je układa, dlatego wywołuje na nich numer sizeThatFits:.

Wysokość widoku B zależy od jego szerokości. W moim przykładzie ma multilinię UILabel w środku.

Jak należy wdrożyć B to sizeThatFits: więc zwraca odpowiedni rozmiar biorąc zarówno parametr size przekazany do sizeThatFits: i ograniczeń w koncie?

Co Próbowałem/uważane do tej pory:

systemLayoutSizeFittingSize: - nie działa, ponieważ nie uwzględnia dokładną wielkość przekazany do niego. Nie można go użyć do określenia dokładnej szerokości, np. Widoku, który rośnie pionowo, gdy kurczy się w poziomie. Daje tylko najbardziej skompresowany rozmiar lub najbardziej rozwinięty rozmiar.

intrinsicContentSize - ten jest wykorzystywany do przekazywania informacji do Auto Layout ile mi zrozumieć z docs. Chcemy uzyskać informacje o automatycznym układzie z.

Tak jak dotąd uzasadniłem. Proszę mnie poprawić, jeśli popełniłem błąd. I pomóżcie mi, byłbym bardzo wdzięczny, gdyby ktoś mógł wskazać mi, jak to się robi!

edytuj: Być może jest jeszcze inny sposób, aby to zrobić, nawet bez korzystania z sizeThatFits:? Jedyne, co mam, to to, że mogę dalej używać układu ramek w "zewnętrznym" widoku (Widok A) i automatycznym układzie w "wewnętrznym widoku" (Widok B).

Edit2: Dodano obrazek ilustrujący dokładnie sprawę muszę rozwiązać

Edit3: Zapomniałem wspomnieć, że trzeba wspierać iOS 7.0

+0

Dlaczego nie umieszczasz wiązań łączących Twoje widoki B z twoim widokiem A i zmieniasz pionowy priorytet zawartości na widok A na niski? – RomOne

+0

Ponadto, jeśli wybierzesz tę opcję, upewnij się, że wszystkie twoje widoki B mają górne i dolne ograniczenia łączące wszystkie widoki razem, tak że widok A będzie wiedział, jak zmienić rozmiar;) – RomOne

+0

Ale to byłoby używanie automatycznego układu w widoku A, i Chciałbym wiedzieć, w jaki sposób umieć pozycjonować widoki arbitralnie za pomocą kodu (układu ramek) w widoku A podczas korzystania z wiązań w widoku B. Oczywiście układ na obrazie można łatwo uzyskać za pomocą układu automatycznego, ale czasami układ może ". wyrażać się w ograniczeniach i chciałbym się dowiedzieć, jak to się robi w takich sytuacjach. –

Odpowiedz

0

z obrazka wydaje się, że UIStackView może być lepiej podejście do widoku A?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/

a potem po prostu powiązać z marginesem przesunięcie dna Zobacz UIStackView do dołu ostatniej View B

+1

UIStackView nie jest dostępny przed iOS 9.0 –

+0

Och, przepraszam, nigdy nie powiedziałem w pytaniu, które muszę obsługiwać iOS 7.0. Ale tak naprawdę, nawet gdyby to nie działało, chciałbym móc ustawić klatki na wszystko, co chcę w widoku A, a UIStackView nie pozwala ustawić ramek do tego, co chcę. –

0

użyłbym autoLayout dla partii. Wciąż możesz określić dokładne rozmiary i pozycje, robisz to tylko z ograniczeniami zamiast z ramkami.