【iOS SDK】InterfaceBuilderを使った設計でiOS7とiOS8で動きが違う部分

iPhone6,6+のお陰で画面設計が非常にAndroidに近い状態になりました

今回あるお仕事でまたXCodeを触る機会をいただいたので
AutoLayoutなるIBを使った画面設計に奮闘しております



ViewControllerのxib設計は問題ない
TabieViewにつけるCellのカスタムもまぁなんとか実装できましたが

ふつーにUIViewクラスを作り、
後付でxibファイルを作成したもの


 2014-11-21 13.25.25.jpg


こんな感じで設計し、
ルートのViewのCustomClass欄に作成したUIView継承クラスを登録しました
File's Ownerには未登録状態です

このようなカスタムなViewをxibからロードしてViewControllerにaddSubViewする際

    UINib* drumRollViewNib = [UINib nibWithNibName: @"DrumRollView" bundle: nil];
    DrumRollView* drumRollView = [[drumRollViewNib instantiateWithOwner: nil options: nil] firstObject];

    [self.view addSubview: drumRollView];
    self.drumRollView = drumRollView;
    [drumRollView release];

上記をViewDidLoadに明記するとOKと情報を得ていました


iOS7のiPhone5sで確認すると

IMG_0080.PNG

うん、ちゃんとAutoLayoutがきいてフルスクリーンで表示されました

一方iOS8のiPhone5sで実行すると

IMG_0071.PNG


!!!???


なにこれ

こんな感じになってしまい
addSubViewする前にスクリーンサイズでSetFrameしても上記のまま・・・

こういったバージョンで異なる挙動は困りますよねー



解決方法は今のところ
CustomClassの登録をViewではなくFile'sOwnerにしておき
登録したクラスのinitWithCoderメソッド内で
xibファイルをロードしてCustomClass内のViewにAddSubViewする方式ならうまくいきました

しかし、いろいろと面倒くさいのでなんとかならないかなー


そういえばIB上で設計しているときに

 2014-11-21 13.32.01.jpg

これならPortrait画面設計がしやすく
きちんと画面表示を確認しましたが

 2014-11-21 13.32.05.jpg


こっちにしてLandscape状態の画面設計をしたとき
実機やXCodeのプレビューで確認いただくと気づくと思いますが
iOS7では画面が表示されませんでした

どんなにボタンなどを画面の中央に表示するようにしても
いっさい真っ白が画面(ルートのビューの背景カラー?)

しょうがないので回転画面の設計は正方形のanyanyで行うようにしました。


なんか情報があったらメモしよう

この記事へのコメント


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