web-dev-qa-db-ja.com

自動レイアウト制約:サイズ変更時にビューの幅と高さの比率を維持する方法

インターフェイスビルダーでは、ピンの高さ、ピンの幅、2つのビューの幅を等しくすることができますが、ビューのサイズを変更するときに幅/高さの比率が維持されるように制約を設定するにはどうすればよいですか?

私の特定のケースでは、View ControllerにUIImageViewがあります。ビューのサイズが変更されると、画像ビューのサイズを変更したいのですが、幅と高さの比率は3:2のままにしておきます。 IBで行うことは可能ですか?コードでそれを行うことは可能ですか?

ありがとう!

31
Joseph Lin

ビューからコントロール自体にドラッグし、アスペクト比を選択することにより、IBにアスペクト比の制約を追加できます。

36
rudi

私はあなたがIBでそれを行うことはできないと思いますが、コードでは、次のように行うことができます(ivは画像ビューへの私の出口です):

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

これにより、高さが明示的に100に、幅と高さの比率が3:2に明示的に設定されます。

34
rdelmar

Appleからのこのガイドは本当に助けてくれました-特定のサブビューのAutoLayoutをオフにしてフレームを直接設定する方法と、コードを介して純粋なAutoLayoutを使用する方法の2つを概説します。

https://developer.Apple.com/library/ios/technotes/tn2154/_index.html

0
Dave Cole