iOS 6 / iOS 7 のレイアウトずれ対策

先日、Xcode 5とiOS 7でレイアウトが崩れるのに驚いて早10日が経ちましたが、モンハン4とドラクエXに時間を浪費していて対応に手がついていませんでしたorz
いろいろ解決方法はあって、iOS 6 と iOS 7 との違いでレイアウトがズレる可能性などを拝見すると、
・StoryBoard を使う
・AutoLayout を使う
・iOS 6/7 Deltas を使う
の3パターンありそうです。
このうち、上の2つは、最低でもiOS 6以上でないど動作しません。僕の持っている初代iPadはiOS 5止まりですし、治そうとしているアプリの性質(カードゲームのスコア管理)を考えると、古いOSで動かしている人も多いんじゃないかな、と思って、3つめの方法を使うことにしました。(勉強不足でStoryBoardを本格的に使ったことがない、 というのもあります)
もし、iOS 6/7 Deltasがルートビューに対して効果を発揮するのなら、何の問題もないのですが、ルートビューへの設定は綺麗に無視されます。ということは、xib上のすべてのオブジェクトに対して設定しろということですね・・。
これ、なんとか楽にコードで設定できないかと思ってやってみました。ベタな方法ですが、全部のSubViewをずらしてやります。

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
    {
        NSArray *arr;
        arr = [self.view subviews];
        for(UIView *view in arr)
        {
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + 20, view.frame.size.width, view.frame.size.height);
        }
    }

たしかに、この方法でうまくいきそうです。
ただし、全部のViewControllerに追記しないといけないのと、InterfaceBuilder上で「View as iOS 6.1 and Earlier」でプレビューしてもズレている状態になってしまうので、良し悪しですね。全部のオブジェクトにDeltaを設定するのも、Shift + クリックで複数選択して、一気にDeltaを設定できるので、それほど面倒ではないですし。(オブジェクトを追加した時に忘れそうですが)
新規で作るアプリはStoryBoardにしよう・・。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク