2015-02-03 19 views
32

Zastanawiam się, czy istnieje sposób programowo pobrać ograniczenie wysokości określonego UIView i zmienić jego wartość w kodzie? Mam sytuację, w której mam kilka UIViews z czterema krawędziami przypiętymi w IB i dodanymi ograniczeniami wysokości (IB narzeka, gdybym tego nie robił), ale w środku programu musiałbym zmienić wysokość UIViews i spowodować, że pewna liczba UIViews być popchniętym w dół w widoku.iOS: Programowa zmiana ograniczenia wysokości UIView

wiem, że mogę ctrl + przeciągnij ograniczeń wysokość każdego UIViews i zmieniać ich wartości w kodzie, ale robi tak wymagałoby mnie do drutu dziesiątki nich. Myślę, że to nie jest wydajne i nie jest skalowalne w żaden sposób.

Zastanawiam się, czy istnieje sposób, aby całkowicie pobrać ograniczenia wysokości określonego widoku za pomocą kodu i zmienić go dynamicznie?

Dzięki!

Odpowiedz

40

można podłączyć tego konkretnego ograniczenia do kodu z konstruktora interfejsu jak

enter image description here

I NSLayoutConstraint ma stałą właściwość należy ustawić który to stała wartość pin.

Jeśli programowo dodajesz ograniczenia, z pewnością możesz korzystać z właściwości identyfikatora w klasie NSLayoutConstraint. Ustaw je i wykonaj iteracje, aby uzyskać konkretne, określone ograniczenie.

W dokumentacji mówi

extension NSLayoutConstraint { 
    /* For ease in debugging, name a constraint by setting its identifier, which will be printed in the constraint's description. 
    Identifiers starting with UI and NS are reserved by the system. 
    */ 
    @availability(iOS, introduced=7.0) 
    var identifier: String? 
} 
+0

Dzięki za szybka odpowiedź. Jestem świadomy tej metody, ale zastanawiam się, czy można to zrobić programowo? Ponieważ mam ogromną liczbę widoków i podpunktów, więc aby je połączyć, jeden po drugim sprawi, że całość będzie wyglądała na bardzo niechlujną i trudną do utrzymania. – Marcus

+0

Jeśli programowo dodajesz ograniczenia, z pewnością możesz skorzystać z właściwości identyfikatora w klasie NSLayoutConstraint. Ustaw je i wykonaj iteracje, aby uzyskać konkretne, określone ograniczenie. –

+0

Edytowałem odpowiedź dla ciebie. –

41

Pierwszy dodać wysokość ograniczenie do pliku .h:

//Add Outlet  
IBOutlet NSLayoutConstraint *ViewHeightConstraint; 

Następnie dodaj poniższy kod do pliku .m:

//Set Value From Here 
ViewHeightConstraint.constant = 100; 
+0

Zrobiłem dokładnie to samo, ale wewnątrz widoku są pewne teksty i etykiety, które mają tam ograniczenia wysokości. kiedy ustawiam wrapperViewHeight na zero, jego subviews nie chowa się, chcę, żeby ukryli się wraz z widokiem, a inne widoki poniżej automatycznie dostosują się do góry. – Nitesh

+0

@Nitesh Możesz ukryć widoki wewnątrz widoku kontenera. a po ustawieniu ograniczenia wysokości widoku opakowania do zera przesunięcie bottomviews do góry. –

+1

Ustaw właściwość rysowania "Podkład klipów" widoku w serii ujęć/xib na. Spowoduje to odcięcie części poza ramką widoku, a otrzymasz pożądany efekt. – MQoder

Powiązane problemy