2013年01月27日

UITabbarController使用時、画面回転を伴う操作時にUIViewのサイズが不正値になる件

PortraitまたはLandscapeモードという画面回転をサポートする動作する条件下においては、画面が回転されたときに、willAnimateRotationToInterfaceOrientationメソッドが呼ばれ、ここで記述された画面回転時の処理が行われる。

このとき、self.view(UIView)のサイズを参照すると、画面の向きに合わせた値になっているのが通常ではあるが、UITabbarControllerと併用したときに、ある条件下において、self.viewのサイズが不正値となることがある。

self.viewのサイズが不正値となる条件。

1. 画面をPortraitまたはLandscapeに向きを変えておく。
2. アプリを起動する。
3. 表示されている画面Aとは異なる画面Bを表示するTabをタッチして、画面Bを表示する。
4. 画面Bの向きを変える。
5. 画面Aを表示するTabをタッチして、画面Aをタッチする。

上記5.のとき、画面AのviewWillAppearで取得した本来のself.viewのサイズ値は、上記4.で向きを変えたPortraitまたはLandscapeの画面回転方向の値となるべきだが、上記3.のself.viewのサイズ値、すなわち画面回転前のサイズ値がセットされている。

このときの、self.interfaceOrientationの値は正しい画面回転の向きを示し、self.viewのサイズ値のみが不正値となっている。

Tabをタッチして画面Bを表示し、その後さらにTabをタッチして画面Aを表示したときは、seif.viewのサイズ値は現在の画面回転方向に一致する。

このため、例えばUIImageViewをself.viewに addSubviewしても、画面上の正しい位置に表示されず、サイズも本来の大きさとは異なってしまう現象が発生する。対症療法的には、contentModeやautoresizingMaskをUIImageViewに設定して微調整する必要がある。(但し、この措置をしても微妙に表示位置・サイズがずれる)


■検証端末:
iOS5.1 iPad2
iOS6.0 iPadシミュレータ

posted by mobileDeveloper at 01:11 | Comment(0) | TrackBack(0) | UIView | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック