iPhone6,6+のお陰で画面設計が非常にAndroidに近い状態になりました
今回あるお仕事でまたXCodeを触る機会をいただいたので
AutoLayoutなるIBを使った画面設計に奮闘しております
ViewControllerのxib設計は問題ない
TabieViewにつけるCellのカスタムもまぁなんとか実装できましたが
ふつーにUIViewクラスを作り、
後付でxibファイルを作成したもの
こんな感じで設計し、
ルートの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];
DrumRollView* drumRollView = [[drumRollViewNib instantiateWithOwner: nil options: nil] firstObject];
[self.view addSubview: drumRollView];
self.drumRollView = drumRollView;
[drumRollView release];
上記をViewDidLoadに明記するとOKと情報を得ていました
iOS7のiPhone5sで確認すると
うん、ちゃんとAutoLayoutがきいてフルスクリーンで表示されました
一方iOS8のiPhone5sで実行すると
!!!???
なにこれ
こんな感じになってしまい
addSubViewする前にスクリーンサイズでSetFrameしても上記のまま・・・
こういったバージョンで異なる挙動は困りますよねー
解決方法は今のところ
CustomClassの登録をViewではなくFile'sOwnerにしておき
登録したクラスのinitWithCoderメソッド内で
xibファイルをロードしてCustomClass内のViewにAddSubViewする方式ならうまくいきました
しかし、いろいろと面倒くさいのでなんとかならないかなー
そういえばIB上で設計しているときに
これならPortrait画面設計がしやすく
きちんと画面表示を確認しましたが
こっちにしてLandscape状態の画面設計をしたとき
実機やXCodeのプレビューで確認いただくと気づくと思いますが
iOS7では画面が表示されませんでした
どんなにボタンなどを画面の中央に表示するようにしても
いっさい真っ白が画面(ルートのビューの背景カラー?)
しょうがないので回転画面の設計は正方形のanyanyで行うようにしました。
なんか情報があったらメモしよう
この記事へのコメント