2

Xcode 6 beta 6 を使用して、ユニバーサル アプリケーションである iOS アプリケーションを開発します。IBOutlets の接続とユニバーサル ストーリーボードの使用に関する問題に直面しています。「w any h any」構成を使用している場合、iPhone と iPad 用に 2 つの異なるインターフェイスを設計することはできません。iPhone の場合は「w コンパクト h レギュラー」、iPad の場合は「w レギュラー h レギュラー」など、異なる構成を使用して設計すると、2 つの異なるインターフェイスを設計できますが、同じ IBoutlet を両方に接続することはできません。iPhoneの構成、つまり「wコンパクトhレギュラー」に接続すると、最初はスムーズに動作しますが、iPadの構成、つまり「wレギュラーhレギュラー」に接続するとすぐに、iPhoneとの接続が自動的に切断されます。

編集 IBOutlets を「w any h any」構成でビューに接続し、iPhone 構成に切り替えて制約を追加すると、ストーリーボードに制約の競合などのエラーが表示されます。Plsは画像を参照してください

に制約を追加したときのエラー

これは、「w any h any」でコンセントを接続し、iPhone 構成で制約を追加した後の iPhone 構成用です。

4

2 に答える 2

0

この質問は 1 年前のものですが、まだこれに苦しんでいる人がいる場合に備えて、ここに解決策があります。

複数のレイアウトで同じ IBOutlet を接続することを計画している場合は、最初に Any - Any レイアウトでレイアウトし、そこからコードで IBOutlet に接続する必要があります。また、特定のレイアウトを使用しない場合でも、コンパイラの警告を回避するために、いくつかの制約を設定します。

たとえば、ユニバーサル アプリが iPhone または iPad のいずれかで縦向きでのみ実行されるように設定されているとします。また、textField とボタンを追加するとします。最初に Any-Any を選択し、textField を画面の真ん中に配置してその制約を設定し、次にボタンをそのすぐ下に配置してそこにも制約し、それぞれをコードに接続します。

次に、縦長の iPhone の場合は Compact-Regular に切り替え、textField を画面の左下部分にドラッグしてそこに保持するように制約を設定し、ボタンをそのすぐ隣に配置して同様に制約します。これらをコードに再接続する必要はありません。Any-Any レイアウトで行ったので、それらは接続されたままです。次に、Regular-Regular レイアウトに切り替えて、今行ったのと同じことを繰り返しますが、今回はボタンと textField を画面の右上に配置し、そこに制約します。

それでおしまい。それらはまだコードに接続されていますが、制約はデバイスに基づいて正しく適用されます。縦長の iPhone でアプリを実行すると、ボタンと textField は画面の左下に表示され、iPad では右上に表示されます。iPhone を横向きに切り替えると、Any-Any レイアウトで配置する場所であるため、中央に拘束されます。これらはすべて、Any-Any レイアウトで接続したのと同じ IBOutlet に接続されています。

ただし、Any-Any レイアウトを変更すると、他のレイアウトに影響することに注意してください。したがって、最初に Any-Any をレイアウトし、それが正しいことを完全に確認してから、他のものに切り替えて、必要に応じて変更を加えます。

お役に立てれば!

于 2015-08-16T04:46:04.840 に答える
0

これが悪い習慣かどうかはわかりませんが、アプリをユニバーサルにしたときに、viewController を複製し、それらを適切なストーリーボードにリンクしました。iPadStoryboard.storyboardにリンクされた名前のストーリーボードが 1 つありiPadViewController.swiftます。もう一方の絵コンテはiPhoneStoryboard.storyboard、 にリンクされた名前が付けられましたiPhoneViewController.swift。お役に立てれば!効率悪くてすみません!

于 2014-11-06T22:57:49.770 に答える