1. ホーム
  2. xcode6

[解決済み] Xcode 6のアダプティブUIは、どのようにしてiOS 7とiOS 6の後方互換性を確保できるのですか?

2022-06-07 20:22:14

質問

WWDC のビデオ 216 番、「Building Adaptive UI with UIKit」を見ました。

45:10 あたりで Tony Ricciardi が、新しい変更をサポートするための Xcode 6 での IB の変更について話しています。

彼は、quot;これらのドキュメントを古いバージョンの iOS に逆向きにデプロイすることができます、と言っています" 。

(ここで "これらのドキュメント" は、おそらく異なるサイズ クラスのための特定の設定を持つ XIB とストーリーボードを意味します)。

私はこれを作っているわけではありません。WWDC のビデオを見てください。

どうしてそんなことが可能なのでしょうか?Trait コレクションとサイズ クラスは、iOS 8 でしか定義されていません。iOS 8 の新機能である UI 構成に依存するランタイムの動作が、以前の iOS バージョンでどのように動作するのでしょうか?

もしそれが です。 が可能であれば、それは素晴らしいことです。iOS 6、7、8 で動作するアプリを構築し、Apple が Xcode 6 に追加した新しい柔軟な UI レイアウト能力を活用することができるのです。私自身、コードで適応型 UI ロジックを作成したことがありますが、かなり大変な作業でした。

どのように解決するのですか?

Interface Builder でサイズクラスを使用して UI に加えた変更は、iOS 7 デバイスと Xcode のプレビューで正しく表示されます。たとえば、私はいくつかの自動レイアウト制約と Regular height Regular width のフォント サイズを変更しましたが、それらの変更された制約は iOS 7.0 を実行している iPad Simulator で表示されます。

すべてのサイズ クラスの最適化は、コンパクトな高さを持つサイズ クラスを除いて、iOS 7 で使用できるようになります。これは Apple によって確認され、現在では直接 ドキュメントに直接記載されています。 :

iOS 8 より前のバージョンの iOS をサポートするアプリの場合、ほとんどのサイズクラスは下位互換性があります。



サイズクラスは、以下の場合に下位互換性があります。

- アプリは Xcode バージョン 6 以降を使用してビルドされます。

- アプリのデプロイメントターゲットはiOS 8より前のものである

- サイズクラスがstoryboardやxibで指定されている

- heightコンポーネントの値がコンパクトでない

iOS 7 はいくつかのサイズクラスを尊重しないため、それらを使用すると問題が発生します。たとえば、次のようなものです。 Compact w Any h を定義し、Compact w Compact h を定義した場合、iOS 7 では Compact w Any h を尊重しますが、iOS 8 では Compact w Compact h の外観をレンダリングします。

したがって、これらの 2 つのサイズ クラスを使用し、iOS 7 との互換性を維持したい場合は、iPhone のランドスケープでの最適化を Any w Any h または Compact w Any h で行い、必要に応じて別のサイズ クラスの最適化を行うことになります。