2013-01-07 9 views
30

W konstruktorze interfejsów możemy przypiąć wysokość, szerokość pinów, równomiernie rozdzielić dwa widoki, ale jak ustawić ograniczenia, aby podczas zmiany rozmiaru zachowywał stosunek szerokości do wysokości?Ograniczenie automatycznego układu: jak zrobić widok zachowując stosunek szerokości do wysokości po zmianie rozmiaru?

W moim szczególnym przypadku mam UIImageView w moim kontroler widoku. Po zmianie rozmiaru widoku chciałbym zmienić rozmiar widoku obrazu, ale zachowuję stosunek szerokości do wysokości 3: 2. Czy można to zrobić w IB? Czy można to zrobić za pomocą kodu?

Dzięki!

Odpowiedz

36

Możesz dodać ograniczenie proporcji w IB, przeciągając kontrolkę z widoku do siebie i wybierając współczynnik proporcji.

+0

Myślę, że ten post powinien zostać oznaczony jako zaakceptować odpowiedź z powodu nowej wersji xcode :) – hqt

+0

Dobry pomysł. IB FTW! –

+1

zdecydowanie jest to właściwa odpowiedź. Jeśli jednak nie podoba Ci się sposób przeciągania kontrolek, kliknij drugą ikonę w prawym dolnym rogu kreatora interfejsu (ten z kwadratem pośrodku) i sprawdź flagę "Współczynnik proporcji". – valvoline

34

Nie sądzę, można to zrobić w IB, ale w kodzie, to można zrobić tak (iv jest mój wylot do widoku obrazu):

[self.iv removeConstraints:self.iv.constraints]; 
    NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100]; 
    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.iv attribute:NSLayoutAttributeWidth multiplier:.66 constant:0]; 
    [self.iv addConstraints:@[con1,con2]]; 

ta wyraźnie określa wysokość do 100, a stosunek szerokości do wysokości do 3: 2.

+0

Dzięki! con2 jest dokładnie tym, czego potrzebuję. –

+0

+1 Nie znalazłem również sposobu, aby to zrobić. Robię to również za pomocą kodu. – Rob

+1

Aktualizacja: Xcode 5.1 obsługuje to w IB (w końcu). –

Powiązane problemy