2013-01-07 6 views
30

Im Interface Builder können wir die Höhe, die Stiftbreite und die Breite der Ansichten einstellen, aber wie stelle ich die Abhängigkeiten so ein, dass das Verhältnis Breite/Höhe beibehalten wird, wenn die Größe einer Ansicht geändert wird?Auto-Layout-Abhängigkeit: Wie kann eine Ansicht das Verhältnis Breite/Höhe beibehalten, wenn die Größe geändert wird?

In meinem speziellen Fall habe ich eine UIImageView in meinem View-Controller. Wenn die Größe der Ansicht geändert wird, möchte ich, dass die Größe der Bildansicht geändert wird, aber ein Verhältnis von Breite zu Höhe von 3: 2 beibehalten wird. Ist es möglich, es in IB zu tun? Ist es möglich, es mit Code zu tun?

Danke!

Antwort

36

Sie können in IB eine Seitenverhältniseinschränkung hinzufügen, indem Sie das Steuerelement aus der Ansicht heraus ziehen und das Seitenverhältnis auswählen.

+0

Ich denke, dieser Beitrag sollte als Antwort akzeptieren aufgrund der neuen Version von xcode :) – hqt

+0

Gute Idee. IB FTW! –

+1

ist dies definitiv die richtige Antwort. Wenn Ihnen das Ziehen des Steuerelements nicht gefällt, klicken Sie auf das zweite Symbol unten rechts in Ihrem Interface Builder (das mit dem Quadrat in der Mitte) und achten Sie darauf, das Flag "Seitenverhältnis" zu aktivieren. – valvoline

34

Ich glaube nicht, Sie können in IB das tun, aber in Code, kann es wie folgt durchgeführt werden (iv mein Ausgang zum Bildansicht ist):

[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]]; 

Dies setzt explizit die Höhe 100, und das Verhältnis von Breite zu Höhe zu 3: 2.

+0

Vielen Dank! con2 ist genau das, was ich brauche. –

+0

+1 Ich habe auch keinen IB-Weg gefunden, dies zu tun. Ich mache es auch über Code. – Rob

+1

Update: Xcode 5.1 unterstützt dies in der IB (endlich). –