このとき、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シミュレータ
【UIViewの最新記事】