OBEJRZYJ, BEZ SPACERÓW!
W oparciu o sugestie w sekcji komentarzy mojej oryginalnej odpowiedzi, a zwłaszcza pomocne sugestie @ Rivera, uprościłem moją oryginalną odpowiedź.
Używam gifów, aby zilustrować, jak proste jest to. Mam nadzieję, że gify będą dla ciebie pomocne. Na wypadek, gdybyś miał problem z gifami, zamieściłem starą odpowiedź poniżej ze zwykłymi zrzutami ekranu.
Instrukcje:
1) Dodaj swoje przyciski lub etykiety. Używam 3 przycisków.
2) Dodaj ograniczenie środkowe x z każdego przycisku do podglądu:
3) Dodaj ograniczenie z każdego przycisku do dolnego ograniczenia układu:
4) Dostosuj ograniczenie dodane w punkcie 3 powyżej w następujący sposób:
a) wybierz ograniczenie,
b) usuń stałą (ustaw na 0),
c) zmień mnożnik w następujący sposób: weź liczbę przycisków + 1 i zaczynając od góry ustaw mnożnik jako buttonCountPlus1: 1 , a następnie buttonCountPlus1 : 2 i wreszcie buttonCountPlus1: 3 . (Wyjaśniam, skąd wziąłem ten wzór w starej odpowiedzi poniżej, jeśli jesteś zainteresowany).
5) Oto uruchomiona wersja demonstracyjna!
Uwaga: Jeśli twoje przyciski mają większe wysokości, musisz to zrekompensować stałą wartością, ponieważ ograniczenie jest od dołu przycisku.
Stara odpowiedź
Pomimo tego, co mówią dokumenty Apple'a i doskonała książka Erici Sadun ( Auto Layout Demystified ), możliwe jest równomierne rozmieszczenie widoków bez przekładek. Jest to bardzo proste w IB i kodzie dla dowolnej liczby elementów, które chcesz rozmieścić równomiernie. Wszystko czego potrzebujesz to formuła matematyczna zwana „formułą sekcji”. Łatwiej to zrobić niż wyjaśnić. Zrobię co w mojej mocy, demonstrując to w IB, ale tak samo łatwo zrobić to w kodzie.
W omawianym przykładzie zrobiłbyś to
1) rozpocznij od ustawienia każdej etykiety na ograniczenie środkowe. To jest bardzo proste do zrobienia. Po prostu kontroluj przeciąganie z każdej etykiety na dół.
2) Przytrzymaj klawisz shift, ponieważ równie dobrze możesz dodać inne ograniczenie, którego będziemy używać, a mianowicie „przewodnik po układzie od dołu do dołu”.
3) Wybierz „przewodnik po układzie od dołu do dołu” i „wyśrodkuj poziomo w pojemniku”. Zrób to dla wszystkich 3 etykiet.
Zasadniczo, jeśli weźmiemy etykietę, której współrzędną chcemy ustalić, i podzielimy ją przez całkowitą liczbę etykiet plus 1, wówczas mamy liczbę, którą możemy dodać do IB, aby uzyskać dynamiczną lokalizację. Upraszczam formułę, ale możesz jej użyć do ustawienia odstępów w poziomie lub jednocześnie w pionie i poziomie. Jest super potężny!
Oto nasze mnożniki.
Label1 = 1/4 = 0,25,
Label2 = 2/4 = .5,
Etykieta 3 = 3/4 = 0,75
(Edycja: @Rivera skomentował, że można po prostu użyć współczynników bezpośrednio w polu mnożnika i xCode z matematyki!)
4) Wybierzmy Label1 i wybierz dolne ograniczenie. Lubię to:
5) Wybierz „Drugi element” w Inspektorze atrybutów.
6) Z rozwijanego menu wybierz „Odwróć pierwszy i drugi element”.
7) Wyzeruj stałą i wartość hCowolna wC. (W razie potrzeby możesz dodać przesunięcie).
8) Jest to część krytyczna: w polu mnożnika dodaj nasz pierwszy mnożnik 0.25.
9) W tym miejscu ustaw górny „Pierwszy element” na „ŚrodekY”, ponieważ chcemy wyśrodkować go na środku y etykiety. Oto jak to wszystko powinno wyglądać.
10) Powtórz ten proces dla każdej etykiety i podłącz odpowiedni mnożnik: 0,5 dla Label2 i 0,75 dla Label3. Oto końcowy produkt we wszystkich orientacjach ze wszystkimi kompaktowymi urządzeniami! Super proste. Patrzyłem na wiele rozwiązań obejmujących ryzę kodu i przekładki. To zdecydowanie najlepsze rozwiązanie, jakie widziałem w tej sprawie.
Aktualizacja: @kraftydevil dodaje, że dolny przewodnik po układzie pojawia się tylko w scenorysach, a nie w XIB-ach. Użyj „Bottom Space to Container” w xib. Dobry chwyt!