dostaję się ostatnio do autoukładów i utknąłem na tym, co wydaje się naprawdę trywialnym przykładem problemu. Mam widok, który chcę usiąść u góry ekranu i zajmować połowę jego wysokości. Proste przed automatycznym układem - po prostu przymocuj go na miejscu i powiedz, aby rozszerzał się w pionie, gdy zmienia się rozmiar superview.
Teraz nie mogę za całe życie zobaczyć, jak to zrobić. Oto, co otrzymuję, gdy próbuję to skonfigurować:
Ograniczenie dolnej przestrzeni jest ustawione na „równa się 284”, co jest dla mnie absolutne i absolutnie bezużyteczne, gdy zmieniam układ na iPhone4, ponieważ zachowuje 284 punkty miejsca na dole ekranu i zmniejsza widok, aby nie był już połową rozmiar ekranu. I nie ma sposobu, aby to ograniczenie było równe jakiejś części wysokości dowolnego innego widoku.
Po chwili zmagania się, jedynym sposobem, w jaki mogę o tym pomyśleć, byłoby wprowadzenie innego widoku poniżej tego widoku, równe przypięcie ich wysokości, umieszczenie ich nad i pod sobą, a następnie ustawienie drugiego (dolnego) widoku jako niewidocznego .. co wydaje się trochę brzydkie!
Czy brakuje mi czegoś oczywistego?
źródło
Odpowiedzi:
Jest to teraz możliwe w IB od [przynajmniej] Xcode 5.1.1. Chociaż zajęło mi trochę czasu, zanim zrozumiałem, jest to w rzeczywistości bardzo proste:
Najpierw utwórz podstawowe ograniczenie wyrównania do góry (musisz również ustawić ograniczenia do dołu, do lewej i do prawej, jak zwykle). Następnie wybierz ograniczenie i przejdź do Inspektora atrybutów :
Następnie możesz dostosować mnożnik. Jeśli chcesz, aby to 50% super widoku, pozostaw je na
1
, ponieważ jest wyrównane do środka super-widoku . Jest to również świetny sposób na tworzenie wyświetleń, które również stanowią inne wartości procentowe (np. 25% super wyświetleń)źródło
First Item
jest . W przeciwnym razie tak, po prostu wyśrodkuje. Będziesz także musiał upewnić się, że inne wiązania są ustawione prawidłowo, aby obsługiwać inne krawędzie widoku.View.Top
View.Center Y
Rozwiązanie scenorysowe, w którym możesz ustawić dokładny stosunek między dowolnymi widokami:
Teraz:
ZYSK!!!
PS Należy również zauważyć, że ta metoda działa z widokami na różnych poziomach zagnieżdżenia i (oczywiście) ma zastosowanie do szerokości
PPS czasami może być pomocne „odwrócenie pierwszej i drugiej pozycji” ograniczenia lub ustawienie odwrotnego mnożnika (na przykład 2 zamiast 0,5) (ale te metody nie są pomocne, jeśli nie rozumiesz, w jaki sposób widoki odnoszą się do siebie).
źródło
Po pewnym czasie doszedłem do następujących rzeczy.
Odnotowuję to jako odpowiedź, ale nie jest to zbyt satysfakcjonujące, ponieważ zakłada, że nie możesz tego zrobić w Interface Builder, ale poprawne ograniczenie można później dodać w kodzie jako:
Zasadniczo ustawia mnożnik 0,5 względem wysokości widzenia siebie, działając na widok górny. Musiałem ustawić priorytet dolnego ograniczenia przestrzeni pionowej w IB na mniej niż 1000, aby uniknąć wielu komunikatów w czasie wykonywania również o łamaniu ograniczeń.
Więc jeśli ktoś może pokazać, jak to zrobić w Interface Builder, to lepiej odpowiedziałoby na moje pytanie, w przeciwnym razie myślę, że to jest tak dobre, jak to tylko możliwe (na razie) ???
źródło
Nieco łatwiejsze i prostsze niż metoda niż odpowiedź Fiodora Volchyoka. -Przytrzymaj przycisk sterowania i kliknij widok podrzędny. -Nadal przytrzymując przycisk polecenia, przeciągnij kursor do widoku nadzoru, a następnie kliknij widok nadzoru. -Wybierz „Aspect Ratio”.
-Następnie kliknij Inspektor rozmiaru. -Następnie kliknij dwukrotnie ograniczenie.
-Upewnij się, że dla obu pozycji wybrano „wysokość”.
-Następnie zmień „Mnożnik” na 0,5 dla połowy ekranu lub dowolnej części superwizji, którą chcesz.
źródło
Istnieje również inna możliwość w kodzie w przypadku, gdy masz 2 widoki, które powinny mieć tę samą wysokość: po prostu ustaw wysokość view2 na wysokość view1 (sztuczka tutaj nie polega na jawnym ustawianiu wysokości view1).
źródło
Szybka wersja odpowiedzi Mete:
źródło