0
if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
   NSLog(@"Device is in portrait");
} else if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
   NSLog(@"Device is in landscape");
}
NSLog(@"View bounds are %@",NSStringFromCGRect(self.view.bounds));

このコードを viewDidLoad から呼び出し、続いてジェスチャ認識エンジンから呼び出します。ランドスケープ モードの場合、viewDidLoad からの出力は次のようになります。

2013-01-04 20:44:48.925 293 Calendar[2638:907] Device is in landscape
2013-01-04 20:44:48.926 293 Calendar[2638:907] View bounds are {{0, 0}, {748, 1024}}

スワイプ ジェスチャ レコグナイザから呼び出された場合の出力は次のとおりです。

2013-01-04 20:44:58.002 293 Calendar[2638:907] Device is in landscape
2013-01-04 20:44:58.004 293 Calendar[2638:907] View bounds are {{0, 0}, {1024, 748}}

デバイスが両方とも横向きの場合、寸法が反対なのはなぜですか? viewDidLoad 以外の場所でビュー ディメンションを確認する必要がありますか? それは何の出来事でしょう?

viewWillAppear を試してみたところ、viewDidLoad と同じでした。viewDidAppear を試してみたところ、ジェスチャ認識と同じでした。したがって、適切なビューのサイズを得るには、viewDidLoad の代わりにそれを使用する必要があると思います。正しい?

4

1 に答える 1

1

このviewDidLoadメソッドは、View Controller のビューが適切なサイズになる前に呼び出されます。この時点で、ビューのサイズが正しく表示されないのは正常です。

これらすべてを処理する適切な場所はviewWillLayoutSubviews. ビューのサイズと方向は、初期表示の結果として、または方向の変更により最新です。これは、ある種の自動レイアウトで適切に処理されないサブビューを更新する必要がある場所です。

于 2013-01-05T04:26:13.293 に答える