質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2296閲覧

iOSアプリの機種の違いによる画面表示について

lyzmfeqpxs54

総合スコア237

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/28 13:39

iOSの機種による画像の表示に関する質問です。
iPhone専用アプリとして制作しているためTARGETS -> General -> Deployment Info -> Devicesは「iPhone」を選択しております。
下記コードのように画面の上部にラベルとなる画像を作成しています。
これをxcodeのシミュレーターで起動した場合なのですがiPadAir2とiPadAirで起動した場合にのみラベルの上部が画面外に隠れてしまいます。
iPadでは互換モードで起動されるため画面比率が2:3になった場合でも表示されるように下記のような方法を取っております。
同じく画面比率が2:3のiPhone4sやiPad2の互換表示では正しく表示されているのですが、何故かiPadAir2とiPadAirでは正しく表示されないようなのです。scWidとscHeiの値をprintで出力してみても320と480と問題ないように思えます。

どのなような原因が考えられますでしょうか。
ご教示のほどよろしくお願いいたします。

// スクリーン画面のサイズを取得 let scWid: CGFloat = UIScreen.mainScreen().bounds.width //画面の幅 let scHei: CGFloat = UIScreen.mainScreen().bounds.height //画面の高さ // タイトル画像の作成 let titleView = UIImageView(frame: CGRectMake(scWid*0.05 ,scHei*0.04 ,scWid*0.9 ,scHei*0.10)) titleView.image = UIImage(named: "top_title.png") self.view.addSubview(titleView)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

試してみたところ、同じような現象を確認しました。なぜかiPadAirは、ステータスバーをiPadの画面の上方(互換画面の外)に表示した分の20ptをカットして表示しているようです。

以下のコードを試すとわかりやすいと思います。

swift

1let scWid: CGFloat = UIScreen.mainScreen().bounds.width //画面の幅 2let scHei: CGFloat = UIScreen.mainScreen().bounds.height //画面の高さ 3for i in 0..<Int(scHei/20) { 4 let y = CGFloat(i*20) 5 let label = UILabel(frame: CGRect(x: 0, y: y, width: scWid, height: 20)) 6 label.text = "\(y)-\(y+20)" 7 if i % 2 == 0 { 8 label.backgroundColor = UIColor.darkGrayColor() 9 } else { 10 label.backgroundColor = UIColor.lightGrayColor() 11 } 12 view.addSubview(label) 13}

最初シミュレータのバグかと思いましたが、実機でも同じでした。

ステータスバーを非表示にした場合はトップの20ptはカットされず正しく表示されましたので、可能ならステータスバーを非表示にするとよいと思います。逆にステータスバーを表示したいなら、本来のiPhoneでもステータスバーと画像が重なって見にくくなると思いますので、ステータスバー部分には何も表示しないよう調整した方がよいと思います。ただ質問のコードをよく見ると、UIImageViewの表示位置(y位置)は、scHei*0.04となっており、縦480ptの場合、ちゃんと20pt分下から表示しているように見えます。ラベルとなる画像の上部が画面外に隠れるというのは、そもそもUIImageViewの表示位置から画像がはみ出しているのではないでしょうか?
もしそれが意図的なもので、ステータスバーの表示を拡張したように見せるためのものであれば、iPadに関してはステータスバー領域が互換画面内に現れないので、制約とするしかなさそうに思います。

投稿2016/09/28 16:29

編集2016/09/28 16:36
TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lyzmfeqpxs54

2016/09/29 09:44

いつもご回答ありがとうございます。 おっしゃるとおり、scHei*0.04だと画面の高さが480の場合、上からの20ptにかぶってしまいますね・・・。そして実機でも同じ症状が出るとは・・・。 ステータスバーを非表示にする方法で回避しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問