Zacznij od oczyszczenia wszystkich swoich ograniczeń ze wszystkiego, więc mamy świeży łupek.
Krok 1: Zbuduj swoją hierarchię widoków. W tym przykładzie chcemy coś takiego:
widok kontrolera widoku, który będziemy nazywać parentView
ma podrzędny, który będziemy nazywać redView
. Ten redView
ma dziecko, pole tekstowe, które nazwiemy textField
.
Hierarchia wygląda następująco:
Krok 2: Ustaw żadnych ograniczeń, które są specyficzne dla każdego indywidualnego widzenia. W tym przypadku prawdopodobnie chcemy ustawić ograniczenie szerokości w naszym widoku tekstowym. Na razie ustawię szerokość 200 punktów.
Etap 3: ustalenie ograniczeń między textView
i jego rodzica, redView
. Powiedzmy, że chcemy mieć 10-punktową granicę dookoła. Dodajmy te ograniczenia:
Gdy dodaliśmy te ograniczenia my dostaje kilka ostrzeżeń układu auto i błędów. Na początek, ponieważ ograniczenia Dodałam do i z miejsca, aby Superview nie odpowiadają rzeczywiste rozmiary, będę miał jakieś ostrzeżenia tak:
Będzie też pewne błędy opisujące brakujący X i Pozycje Y dla redView
i dla textView
. Tutaj jest naprawdę dwa razy więcej błędów. textView
wie, gdzie się pozycjonować względem redView
. Nie potrzebujemy więcej więzów, aby uporządkować pozycję textView
. Jednak redView
nie wie, gdzie się ustawić jeszcze ... i tak ostatecznie, textView
również nie wie dokładnie.
Możemy zaktualizować ramkę textView
, aby pozbyć się ostrzeżeń, ale przejdźmy dalej i naprawmy rzeczywiste błędy.
Krok 5: Ustaw ograniczenia redView
w stosunku do superView
. redView
już wiem, jaki rozmiar ma być. Zauważ, że nie mieliśmy błędów dla szerokości redView
. Po prostu nie wie, gdzie być. W takim przypadku pójdę prosto i powiem, że chcemy, aby środek wyśrodkowany był redView
. Więc chcemy dodać te ograniczenia:
Teraz mamy ustalone pewne problemy. Jedyny problem, który pozostaje, to height
na wszystko.
Aby to naprawić, musimy ustawić priorytety wielkości treści na textView
. Ustaw wszystkie na 1000 i zmień właściwość "Rozmiar wewnętrzny" na "Zastępczy".
Do tej pory wszystkie błędy układ automatycznego powinien zniknąć i powinniśmy być pozostawione tylko z ostrzeżeń, ponieważ nasze ramy storyboard nie pasują nasze ograniczenia co mówią, że powinno.
Możemy naprawić wybierając parentView
i aktualizowanie wszystkich klatek:
Jest jeden końcowy zastrzeżenie do tego układu auto układanki, jeśli chodzi o autosizing na podstawie wielkości partnerskiej: co się stanie, jeśli nasz widok tekstu nie zawiera treści?
Jeśli nasz widok tekstowy nie zawiera żadnych treści, układ automatyczny wybierze wysokość 0, a nasi użytkownicy nie będą nawet mogli zobaczyć, że jest tam widok tekstowy, a co dopiero zmniejszać go, aby dodać zawartość (i sprawić, aby rozszerzać). Podczas korzystania z automatycznego układu i wymiarowania na podstawie treści powinniśmy prawie zawsze mieć pewność, że ustawiliśmy konkretny lub minimalny rozmiar dla widoku treści.
Nie musimy się martwić o naszą szerokość textView
, ponieważ ustawiamy to wyraźnie na 200. Dodajmy więc minimalne ograniczenie wysokości. Zacznij dodając żadnych ograniczeń Wzrost:
Teraz przejdź do inspektora size dla textView
, uważają to ograniczenie wysokości dodaliśmy i edytować go w większy niż lub równy przymusu:
Scenorys nie odzwierciedla zmiany w treści naszej textView
i odpowiednio ją zmienia, ale twoje ograniczenia są teraz poprawnie skonfigurowane i będzie to działać poprawnie na Twoim urządzeniu lub w symulatorze.
Wielkie dzięki :) Teraz ma sens! – thirdage
Czy możesz sprawdzić mój inny scenariusz, ponieważ nie mogę kontrolować widoku nagłówka tabeli: http://stackoverflow.com/questions/27077818/how-to-stop-a-uitextview-from-covering-uitableviewcell – thirdage