###前提・実現したいこと
Xcode8を使用してiOSアプリを保守・開発しています。アプリ自体はiOS4の時代に作られたものを引き継ぎ、少しずつ手直ししながらメンテし続けています。
今回、Deployment Target をiOS6.0に変更しました。変更した理由は、実行中に Unrecognized selector [UIDeviceRGBColor length] というエラーで落ちてしまっていたのですが、xibファイルの Target For を 5.1 より新しいものに変更すれば良いという情報を得たからです。
xibファイルの Target For を 6.0 に変更し、プロジェクトの Deployment Target を 6.0 にしました。
###発生している問題・エラーメッセージ
xibファイルの Target For を変更してコンパイルしたところ、画面のレイアウトが崩れて表示される画面がいくつか発生してしまいました。崩れるパターンは:
1.画面の下端から高さ分だけマイナスした座標にセットしたパーツが表示されない
2.画面幅いっぱいにデザインされているパーツが画面幅の8割くらいの幅で表示される
3.画面幅いっぱいにデザインされているパーツが右側にはみ出て表示される(右側は見切れてしまい読めない)
手元の実機は iPod touch 5G と iPhone6 ですが、どちらも同様にはみ出たり、小さくなったりして表示されました。iPhone6は互換モード(横幅320)で表示されていると思われます。
右側にはみ出て表示されるパーツが乗っているViewの幅をNSLogで表示させてみたところ、iPod touch 5G は画面幅320ピクセルのはずですが、375と表示されました。
NSLog(@"w=%d", (int)self.view.frame.size.width); //375と表示
(375という数字は、375×2=750、つまりiPhone6/7のピクセル数っぽいです)
###試したこと
画面上のパーツのレイアウトは viewDidLayoutSubviews の中で行うという情報がありましたので、viewDidLayoutSubviews の中で画面幅を self.view.frame.size.width にセットし直すようなコードを書きましたが、変わりませんでした。
-(void)viewDidLayoutSubviews { CGRect frame = resultLabel.frame; frame.size.width = self.view.frame.size.width; [resultLabel setFrame:frame]; [self.view layoutIfNeeded]; }
(最後に layoutIfNeeded を呼ぶと良いという情報があったので追加しましたが、変わりませんでした)
そこで、Interface Builder の画面を見ると View as iPhone7 という表示があり、クリックすると他に iPhone7 Plus, iPhoneSE, iPhone 4S が選択できることがわかり、試しに iPhoneSE を選択してコンパイルし直したら、はみ出しなどがなくなり、想定通りのレイアウトで表示されました。
###疑問
View as iPhone7 の部分を iPhoneSE に変更することで、iPod touch 5G で正しい表示になったのですが、この機能はあくまでもデザイン時のプレビュー機能と解釈していたのですが違うのでしょうか。
もしこの設定がコンパイル結果に影響するとなると、iPhone7 Plus, iPhone7, iPhoneSE などごとに設定を変更しなければならなくなり、おかしなことになってしまうと思います。
どのように修正するのが良いのかわからなくなってしまいました。何かアドバイスがありましたらお願いします。
###開発環境について
言語は Objective-C です。先日 Xcode 8.2.1 にアップデートしました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/23 08:44