2017-10-13 5 views
0

ovalViewの中にimageViewがあり、自動レイアウトが制限されています。 viewDidLayoutSubviews()インサイドViewDidLayoutSubviewsで定義したフレーム位置が正しくない

、私はUILabel

let label = UILabel(frame: imageView.frame) 
imageView.superview?.addSubview(label) 

を作成していたラベルのフレームは、ImageViewのから偏心し-わずか示しています。

しかし、上記のコードをviewDidAppear()の内側に移動すると、ラベルは完全にimageViewの中央に表示されますが、ユーザーは望ましくない変更を認識します。

コードをviewDidLayoutSubviews()に保存して動作させるにはどうすればよいですか?

+0

後に私のコードで

self.view.layoutIfNeeded() 

を追加することにより、viewDidLayoutSubviews()に自分のコードを維持することができましたか?つまり、ラベルの幅の半分を引いてx軸に合わせる必要があります。 – LinusGeffarth

+0

なぜViewDidAppearで動作しますか? – Kashif

答えて

0

他の人には、同様の問題に直面している可能性があります。私は、ビューの左上のアンカーであること、あなたがフレームを設定すると、原点を変化させることを認識して

let label = UILabel(frame: imageView.frame) 
imageView.superview?.addSubview(label) 
1

viewDidLayoutSubviewsが呼び出されると、そのメソッドが呼び出される前にビューに最終フレームがあるとは見なされません。あなたの場合は、それは何が起こったのです。 viewDidAppearに電話すると、あなたのビューはすべてのフレームを描画し、正しいフレームが得られます。代わりにviewDidAppearに電話してください。

+0

また、ユーザに変更を見せたくない場合は、 'viewDidLoad'または' viewWillAppear'にあります。確かに@LinusGeffarth。 – LinusGeffarth

+0

しかし、私は 'viewWillappear'でそれを追加しました。 –

+0

viewDidLoadまたはviewWillAppearでは機能しません。これはviewDidAppearでのみ機能し、ユーザーは変更が発生している(望ましくない)ことがわかります。 – Kashif

関連する問題