2017-04-11 12 views
0

UIView'sコントローラにはUIButtonがあります。 UIButtonの位置は、UIViewの先頭から10ピクセル、UIViewの末尾位置から20ピクセルの別のUILabelから10ピクセルです。両方ともUIButton & UILabelは同じ高さと幅を持ちます。ビューは自動レイアウトモードで設計されています。自動レイアウトでUIButtonの位置を取得する方法

がXIBから初期位置を反映しているが、ビューがロードされた後に、ボタンの位置のように変更されるように、UIView'sコントローラ

UIView 

    -> `UIButton`, `UILabel` 

------------------------------ 
|     |   | 
|    10   | 
|     |   | 
|    B - 20 - L | 
|       | 
------------------------------ 

ViewDidLoad方法で取得UIButtonの位置が正しくないボタン&ラベルの位置自動レイアウトが使用されています。

UIViewが表示されたら、UIButtonの位置(x & y)を検索するにはどうすればよいですか?

viewdidload方法は、以下のように

- (void) Viewdidload() { 

    [UIView addSubview:object1]; 
    --- 
    [UIView addSubview:object2]; 
} 

おかげです。

+1

'viewDidLayoutSubviews()'は、ビューのレイアウトの回転やその後の変更があっても、ボタンの正しい座標を正しく取得できる場所です。 –

+0

@AdilSoomro、viewDidLayoutSubviews()は、追加または削除されたすべてのサブビューに対して呼び出されます。私のケースでは、このメソッドが呼び出されているので、私はUIButtonの位置の値が違うことを観察することができました。 – user2071152

+1

理想的には、 'viewDidLayoutSubviews()'に新しいビューを追加するのではなく、必要に応じてフレームや座標を設定するだけです。 –

答えて

0

ビューは、ライフサイクルviewDidLoad()が呼び出された時点で(自動)レイアウトされていません。

viewDidAppear()またはviewWillAppear()で位置を取得してください。

+2

viewDidLayoutSubviews()がおそらくより良いオプションです。 – picciano

+0

@piccianoなぜそれは良いですか? – shallowThought

+0

ほとんどの場合はうまくいくかもしれませんが、viewDidAppearは一度しか呼び出されません。これは、後でlayoutSubviewsを呼び出すときに追加のレイアウトが実行される前です。オリエンテーションの変更や他のサブビューの追加など、レイアウトが再度実行された場合には、再度呼び出されることはありません。 – picciano

関連する問題