5

ここで何かを見逃してしまった場合は申し訳ありませんが、IBで作成されたUIViewオブジェクトのフレームはviewDidLoadで作成する必要があると思いました。これにより、viewDidLoad、awakeFromNib、またはviewWillAppearでこのビューに基づいて初期設定を行うことができます。各メソッドで出力をログに記録しました。

NSLog(@"%@ %s", NSStringFromCGRect(self.zoomView.frame), __FUNCTION__);

そして、全部で{0、0、0、0}を取得します。

これは私のUIStoryboardの最初のペン先で、AutolayoutとiOS 6を使用しています。以前のアプリで、IBで作成された他のUIViewオブジェクトのフレームを使用して設定した可能性があります。何か変わったことはありますか?それとも私はそれを間違って覚えていますか?ありがとう!

4

2 に答える 2

4

私はまったく同じ問題を抱えていました。はい、正しく覚えています。以前はiOS 5で異なっていました。私は常にビューを設定しましたviewDidLoad:が、フレームは、ビューが実際に画面に表示されたときの状態になっています。

iOS 6では、自動レイアウトviewDidAppear:が有効になっている場合、有効なフレームを使用できるようにコードを挿入する必要があります。どうやら、レイアウトはこれら2つの呼び出しの間に行われます。

于 2013-02-24T23:54:02.207 に答える
0

使用しているデバイスやその他のことと関係があると思いますが、フレームと境界は、viewDidLoadが呼び出されるまでに設定される場合と、設定されない場合があります(...によって異なります)。一方、フレーム境界は、「ViewDidAppear」が呼び出されるまでに設定されていることが保証されます。そして、フレームと境界に関連するコードを保証されている場所に配置したいとします。

于 2013-02-25T00:06:47.477 に答える