2013-08-13 16 views
26

自動レイアウトは、それなりに良いものです。私はIBでデザインされたポートレートモードを持っていますが、希望する横長の向きを得ることができません。ポートレートと風景のAutoLayoutを使って作業する

layout

向きがランドスケープに変更されたとき、UIImageViewブロック間の間隔が減少し、整列右SAMPLE TEXT変更のテキストの配置ということに注意してください。

現在、私はそれが機能するためのいくつかの制約を追加しました。しかし、UIImageViewブロック間のスペースを固定しておく必要があります。その結果、ポートレートでは窮屈に見え、ランドスケープではうまくいくように見えます。私はそれを肖像画で均等に広げ、景観を圧縮する必要があります(上記の画像のように)。同様に、現在のところ、私の制約がテキストを表示していますが、画面の中央に置かず、右揃えにしています。

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

+0

フレキシブルなスペーシングを実現するためには、次の質問が役立ちます。http://stackoverflow.com/questions/17089427/ios-autolayout-vertically-equal-space-to-fill-parent-view and http://stackoverflow.com/質問/ 13680303/ios-auto-layout-equal-spaces-to-fit-superviews-width – Mikhail

+0

実行時にviews制約を使用して再生すると便利です。[Runtime Change in Autolayout](http://stackoverflow.com/questions/27414052)/moving-views-with-constraints/27420696#27420696) – Kampai

答えて

12

これにはいくつかの方法があります。 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; 
    } 
} 

を、最も簡単な方法は、あなたが(底面およびcenterX)持っている制約を削除して、回転に末尾とcenterYを追加することです。

+0

いいですね。しかし、私のビューは応答していません - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration :(NSTimeInterval)duration .. NSLog-ging the interfaceOrientationを試しましたが、何も出力に来ません。しかし、それはアニメーションを鈍らせるものです。 ビューがあなたが言及したメソッドに応答しない理由を知っています –

+0

@ GauravWadhwani、なぜ呼び出されないのか分かりません。コードをupdateConstraintsに入れるために投稿を変更しました。それが動作するかどうかを確認します。 – rdelmar

+0

これは動作します、ありがとうトン!これで1日を過ごした。ブロックを追加してすぐにあなたの答えに印を付けるだけです。もう一度おねがいします:) –

2

はい、これは間違いなく自動レイアウトで行うことができます。答えとして投稿するには時間がかかるかもしれないと思う一連のステップを経て、ImageViewsの間隔を維持し、テキストの配置を同じに保つことができます。

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

これを行う方法に関する完全な説明(ほとんどあなたが求めているもの)is explained in this tuorial。あなたはそのページの途中にそれを見つけることができます。

これはあなたが探していたものです。

+0

現在、圧縮とテキストの配置は変更されていません。私はスペースを圧縮し、テキストの配置を変更したい。 –

+0

私が与えたリンクを試しましたか?どのスペースを圧縮したいですか?あなたの質問から、それらを風景で圧縮したくないと思われるようです。実際にそれらを圧縮したいですか? – CaptJak

+0

ええと、私はブロックが画像に表示された通りになるように、縦方向に間隔を空けて横方向に圧縮したいと思っています。以前はリンクを試しましたが、問題を解決できませんでした。もう一度読むでしょう:) –

6

はい、自動レイアウトを使用することができます。方向に応じてビュー間の間隔を拡大または縮小する場合は、距離の拡大または縮小を許可する拘束条件として、Less ThanまたはEqualまたはGreater ThanまたはEqualの関係(Equalではなく)を使用できます。

enter image description here

あなたはあなたが望むものを得ることができるはずです。

+0

あなたの返事をありがとう。私はその制約を変更しようとしました。しかし、私が "Equal to"以外のものに変更するとすぐに、水平配置のためのあいまいなレイアウト警告が表示されます。 –

+0

'UIImageView'のトップとボトムに他の制約を追加する必要がありますので、それらの間の制約内で<= or > =を使用することはあいまいではありません。 – mluisbrown

+0

UIImageの位置を垂直に変更する必要があるので、私が追加する制約はすべて<= or =>の形式になります。しかし、xcodeは、固定されている垂直に対して少なくとも1つの制約を追加することを期待しています。固定制約を追加して柔軟に保つにはどうすればよいですか? –

関連する問題