2015-09-29 12 views
8

tworzę XIB w Xcode i dodać prosty widok jako podrzędny:Dynamicznie zmiana rozmiaru widoku korzeń XIb do wielkości jego zawartość z autoLayout

XIB with rootview and subview

Co chcę osiągnąć jest, że subview ma stały rozmiar i rootview automatycznie dostosowywany do wielkości tego podrzędny, pozostawiając margines 20,0 wokół niego:

Resized XIB

Więc dodam stałą szerokość i wysokość stałą presję na subvi ew. Następnie dodaję cztery ograniczenia do marginesu 20,0:

Constraints View showing constraints

Jak superview nie ma żadnych ograniczeń nie powinno być ani dwuznaczności ani sprzeczne ograniczenia: spodziewałbym się Superview się kurczyć w celu dopasuj ograniczenia. Jednak Xcode narzeka:

Warnings

Ograniczenia te byłyby sprzeczne tylko jeśli rootview miały stały rozmiar i który wydaje się być przypadek. Tak więc moje pytanie brzmi: Jak mogę uczynić rootview XIB flexible tak, aby dynamicznie dostosowywał swój rozmiar, aby pasował do jego zawartości?

(Czy to w ogóle możliwe z interfejsu Builder?)

+0

Każdy, kto ma ten problem, proszę się nie martwić. Aby wyłączyć błędy XIB, ustaw odpowiedni rozmiar widoku. Następnie, gdy utworzysz widok, zostanie on automatycznie przeskalowany tak, aby spełniał ograniczenia. – kelin

Odpowiedz

4

Jak mogę sprawić, że rootview z XIB elastyczny tak, że dynamicznie dostosowuje swój rozmiar, aby dopasować jego zawartość?

Nie można utworzyć konstruktora interfejsu.

Jak superview nie ma żadnych ograniczeń nie powinno być ani dwuznaczność ani sprzeczne ograniczenia

jej nie tylko super widok. Jest to również obiekt w stalówce. Definiujemy symulowany rozmiar takich widoków. Można to wykorzystać do wyciszenia błędów. Ale znowu są po prostu symulowane.

Czy to rootView jest widokiem kontrolerów widoku? Jeśli tak, nie rozumiem, dlaczego próbujesz naprawić jego wartość 280 do 168.

Jeśli ten widok jest niestandardowym widokiem, który zamierzasz dodać do innego widoku "nadrzędnego". Następnie powinieneś zmienić symulowany rozmiar na 280 i wysokość 168, a dodając to jako podgląd, musisz dodać dwa dodatkowe ograniczenia, aby ustawić ten widok root w widoku "nadrzędnym".

+0

Chodzi o to, że: Widok root powinien być komórką widoku tabeli i jeśli chcę go użyć z autolayout, potrzebuję widoku root, aby najpierw dostosować się do ograniczeń, więc mogę wtedy uzyskać wysokość ramki, aby zwrócić ją z tableView: heightForRowAtIndexPath: 'method. – Mischa

+2

Dzięki za odpowiedź! Naprawdę zastanawiam się, dlaczego nie jest to możliwe ... – Mischa

+0

Jeśli próbujesz uzyskać wysokość komórki przez to. Kierujesz się w złym kierunku. – BangOperator

0

Chyba zapomniałeś ustawić automatyczne zmiany rozmiaru maski dla całego pojemnika

self.yourViewController!.view.translatesAutoresizingMaskIntoConstraints = false 
+0

Nie, ponieważ: 1) W moim pytaniu miałem na myśli 'UIView', a nie' UIViewController'. 2) Ten kod będzie działał tylko w środowisku wykonawczym, a nie w Konstruktorze interfejsów, ponieważ nie ma czegoś takiego jak kontroler ** widoku IB_DESIGNABLE **. 3) Jak zaznaczył @BangOperator w swojej odpowiedzi Interface Builder * zawsze * używa stałej ramki dla widoku głównego dowolnego pliku IB, może to być XIB lub storyboard. – Mischa

0

Można to zrobić poprzez edycję XIb ręcznie, na przykład, aby ustawić ograniczenie wysokości (w moim przypadku było to nierówność do ustawić minimalną wysokość):

  1. dodać ograniczenie do podrzędny dla wysokości
  2. otworzyć XIb jako plik tekstowy
  3. znaleźć ograniczenie Państwo dded (np Cmd-F'ing do wartości wysokości)
  4. wyciąć i wkleić go do sekcji więzów widoku root
  5. Otwórz xib w interfejsie konstruktora ponownie
  6. Ograniczenie pojawia się i można je edytować jak normalnie.
Powiązane problemy