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

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

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

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

Xcode

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

Swift

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

Q&A

解決済

1回答

2417閲覧

端末の識別ができない(UIUserInterfaceIdiom)

Y_M

総合スコア265

iOS

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

Xcode

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

Swift

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

0グッド

1クリップ

投稿2017/06/20 08:40

編集2017/06/20 08:53

###前提・実現したいこと
UIDevice.current.userInterfaceIdiomを使ってiPadとiPhoneで処理を分岐したいのですが、
こちらを使うと分岐できなくて困っています。
printを使って出力すると、UIUserInterfaceIdiomとしか返ってきません。

###発生している問題・エラーメッセージ

Swift

1let currentDevice = UIDevice.current.userInterfaceIdiom 2print(currentDevice) 3 4/*出力結果 5UIUserInterfaceIdiom 6*/

###該当のソースコード

Swift

1if UIDevice.current.userInterfaceIdiom == .phone { 2 viewController = storyBoard.instantiateInitialViewController()! 3} else { 4 viewController = storyBoard.instantiateViewController(withIdentifier: "iPadSize") as! UINavigationController 5}

###追加
AppDelegate内で実行しています。

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

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

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

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

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

fuzzball

2017/06/20 08:55

.userInterfaceIdiom.rawValueの出力結果を教えて下さい。
Y_M

2017/06/20 09:00

iPadだと"0"、iPhoneでも"0"でした。
fuzzball

2017/06/20 09:02

Universalアプリですか?
Y_M

2017/06/20 09:09

いえ、iPhone用アプリです。もしかするとこちらはUniversalでないと使えない感じですかね。
fuzzball

2017/06/20 09:14 編集

回答書きましたが、疑問が一つ。Universalアプリじゃないなら、なぜiPhoneとiPadでレイアウトを変えようとしているのでしょうか?
Y_M

2017/06/20 09:18

長文だと見にくくなると思ったので、回答の方に記載しました。
guest

回答1

0

ベストアンサー

**userInterfaceIdiom **のリファレンスに、

The style of interface to use on the current device.

と書かれているので、端末の種類ではなく、インターフェースの種類(レイアウトの種類?)なのではないでしょうか?

For universal applications,

とも書かれています。

.nameとか.modelの方が良いのでは?

投稿2017/06/20 09:11

fuzzball

総合スコア16731

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

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

Y_M

2017/06/20 09:18

iPhone用のアプリとして作っていましたが、 AutoLayoutなどを使用していないのでiPadのiPhoneシミュレーターだと画面が切れてしまうのです。 審査では「iPadでも必要最低限の機能が動作すること」という基準があるようなので、 対象画面だけViewControllerを切り替えようと考えたためです。
Y_M

2017/06/20 09:22 編集

結果についてですが下記の通りです。 `UIDevice.current.name`だと「○○○のiPad」という端末の名前 `UIDevice.current.model`と`UIDevice.current.localizedModel`だと それぞれ`iPad`と`iPhone`と出力されました。
fuzzball

2017/06/20 09:33 編集

>>iPadのiPhoneシミュレーターだと画面が切れてしまうのです それはiPadだからじゃなくて、3.5インチに対応できていないのでは?(たぶん4Sもアウトな気が)
Y_M

2017/06/20 09:41 編集

>>それはiPadだからじゃなくて、3.5インチに対応できていないのでは?(たぶん4Sもアウトな気が) おっしゃるとおりですw 確認できるのがiPadだったのでそこを分岐しようとテストしている過程になります。 iPadで問題なければ3.5インチ対応できると思うのですが、それとは別問題ですかね。
fuzzball

2017/06/20 09:44 編集

>>iPadで問題なければ3.5インチ対応できると思う というのは正しいですが、「iPad」で分岐しちゃダメでしょう‥。 長辺==480で分岐すればいいのでは?
Y_M

2017/06/20 09:47

そうですね、そちらでの対応が確実かと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問