2011-08-30 9 views
6

親UIView(parent_UIView)のサブビューとして、サブUIView(sub_UIView)を配置する必要があります。 parent_UIViewのサイズ変更/移動時に、sub_UIViewはparent_UIViewの相対位置にとどまります。たとえば、sub_UIViewはparent_UIViewの右下にあります。 parent_UIViewが移動すると、sub_UIViewは自動的にparent_UIViewの右下隅にとどまります。iOSの相対位置を自動的に処理する方法は?

parent_UIViewのフレームが動いているときにsub_UIViewのフレームを更新することで手動でこれを行うことができましたが、iOSでこれを自動的に行う方法はありますか?このためのプロパティはありますか? (サブビューのサイズを変更する自動サイズ変更マスクに似ています)

ありがとう!

+0

あなたの子供の 'UIView'に対して' autoresizingMask'を適切に設定できないのはなぜですか?結局のところ、別のビューの子にすると、それはサブビューです! –

+0

返事をありがとう。 サブビューでこれを行いました: – androidkc

+0

[self setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin]; でも動作しないようです。 – androidkc

答えて

4

のみのiOS 6で

自動レイアウト(IOSの6)

リサイズマスクを挙げることが古い応答を、更新、オートレイアウトをストーリーボード/ XIBにXCodeので動作するように、いえ、ちょっと醜い加えました。 Autolayoutは説明するには大きすぎますが、その本質は階層内のビュー間のルールのセットだということです。したがって、ビューのx位置を親ビューの右端に固定することができます。これは

myView.autoresizingMask = UIViewAutoresizingMaskFlexibleTopMargin | 
    UIViewAutoresizingMaskFlexibleLeftMargin | 
    UIViewAutoresizingMaskFlexibleWidth | 
    UIViewAutoresizingMaskFlexibleHeight; 

を行うのと同等の

Autoresizing and positioning inside a view

です:サイズインスペクタのオプションを見てみましょうAuto Layout Programming Guide

自動サイズ変更マスク(iOSの2)

を参照してください。コードで実行してからIBを実行するまでには違いがあることに注意してください。境界線のIB自動サイズ設定はストラットとして機能し、正しいものを選択します。たとえば、「私の右の境界線はスーパービューの右端に固定されています。

一方、コードでは、境界線が張られていない辺を指定する必要があります。柔軟性があります。高さと幅は正常に機能します。

レイアウトサブビュー(iOSの2が、iOS5を+のための落とし穴)

すべてが失敗した場合、私はその位置にしてきた、そしてそれだけでunmaintanableにつながる、あらゆる場所に手動位置合わせをやって起動していません、 3つ以上のメソッドが同じビュープロパティを混乱させているスパゲッティコード。

代わりに、UIView -layoutSubviewsにあなたのカスタムポジショニングをすべて行うことをお勧めします。このメソッドは、setNeedsLayoutがトリガされたときに必要に応じて呼び出されます。たとえば、ビューの幅が変更された場合、サブビューはレイアウトのサブビューイベントを取得します。このメソッドは、アニメーションがどのように見えるかを判断するために、新しい幅が呼び出されるため、回転インターフェイスの実装がさらに簡単になります。

レイアウトのサブビューは、自動レイアウト/自動サイズ変更マスクの実行後に機能します。

関連する問題