web-dev-qa-db-ja.com

ポートレートおよびランドスケープでのオートレイアウトの使用

自動レイアウトは、それだけでなく、制約に夢中になります。 IBで設計されたポートレートモードを使用していますが、希望する横長の向きが機能しません。

layout

向きが横向きに変わると、UIImageViewブロック間の間隔が狭くなり、SAMPLE TEXTは右揃えに変わります。

現在、私はそれが機能するためにいくつかの制約を追加しました。ただし、UIImageViewブロック間のスペースを固定する必要があります。その結果、UIImageViewブロックはポートレートでcr屈になり、ランドスケープでうまく表示されます。縦向きに均等に広げ、横向きに圧縮する必要があります(上の画像のように)。同様に、現在、私の制約はテキストを表示しますが、画面の中央に配置し、右揃えにしません。

これは自動レイアウトで可能ですか?もしそうなら、どのように?非常に感謝ヘルプ。

26
Gaurav Wadhwani

これにアプローチする方法はいくつかあります。 1つの方法は、3つの画像ビューをUIViewで囲むことです。上部と下部のイメージビューの制約をそれぞれ上部と下部に与え、中央の制約にcenterY制約を与えます。この囲まれたビューに固定された高さと幅を与え、コントローラーのビューの上部に制約を与えます。この囲まれたビューの高さの制約に対してIBOutletを作成し、回転時に変更します。以下の例では、縦に350の高さを与えました:

-(void)updateViewConstraints {
    [super updateViewConstraints];
    if (self.view.bounds.size.height < self.view.bounds.size.width) {
        self.heightCon.constant = self.view.bounds.size.height;
    }else{
        self.heightCon.constant = 350;
    }
}

ラベルに関しては、最も簡単な方法は、持っている制約(bottomとcenterX)を削除し、回転時に末尾と中央Yを追加することです。

12
rdelmar

はい、自動レイアウトで実行できます。ビュー間の間隔を方向に応じて増減させる場合は、制約に(等しいではなく)より小さいまたは等しい、またはより大きい、または等しい関係を使用して、距離を拡大または縮小できます。

enter image description here

それで遊んで、あなたが欲しいものを手に入れることができるはずです。

6
mluisbrown

はい、自動レイアウトでこれを行うことは間違いなく可能です。回答として投稿するには長すぎると思われる一連の手順を経て、ImageView間の間隔を維持し、テキストの配置を同じに保つことができます。

基本的に、方向を変更したときに間隔が自動的に圧縮されないように、各ImageViewの角を固定し、いくつかの制約を削除する必要があります。

これを行う方法の完全な説明(あなたが求めていることはほぼ正確です) このチュートリアルで説明されています 。ページのほぼ半分にあります。

これがあなたが探していたものであることを願っています。

2
CaptJak