以下では、ストーリーボードまたは一連のXibファイルを使用して、手動verst(自動レイアウトを使用して)を使用せずにさまざまな方法を比較します。 このトピックを完全に公開するつもりはありません。エラーを指摘したり、他の方法論や比較基準を提供したりしていただければ幸いです。
この投稿には実験や学術的な計算は含まれておらず、iOS開発の分野における私の知識と経験に基づいています。 専門家の意見を知ってうれしいです!
一部の予約には、次の開発方法があります。
- 1つのストーリーボードとその中のすべて (コード内の最小レイアウトコード)-小さなプロジェクトで使用されます。 開発チームが開発した場合、非常に不便です。
- いくつかのストーリーボードとその中のすべて。
- Storybaordを忘れて、すべてのUIコントロールをxibファイルに入れます( この投稿を参照)。
- StoryboardとXibについては忘れていますが、オートレイアウトを使用します -こんにちはPureLayouts。
- すべてのStoryboard / Xib / AutoLayoutsを忘れて、全員のビューフレームを手動で設定します。
- UIKitについては忘れています-FacebookまたはComponentsKitのサードパーティのAsyncDisplayKitソリューションを使用しています。 (私はそのような経験がないので、価値のあることは何も言いません)。
ストーリーボードとXib
問題は次のとおりです。
- ほとんどのアニメーション関連コードはそこに配置できません。
-
それらが複数ある場合、一方から他方に切り替えると、メインスレッドに負荷が作成されます(NSKeyedArchiverはストーリーボードを解析する必要があり、それ自体は遅いです)。 -
望むなら、Storybaordですべてを行うことはできません。たとえば、cornerRadius、shadowOffsetなどを設定します。; 実際、可能です-ユーザー定義のランタイム属性(@IBInspectable)
長所:
- レイアウトは視覚的です。
- ユーザーストーリーは表示時に表示されます。
- サイズクラス
- Embedded Segue / Storyboard Referenceを使用し、楽しく生きています
- 遷移のタイプから抽象化し、遷移自体を実装するには、セグエ識別子( RamblerSeguesを参照)を知るだけで十分です。また、自動依存性注入ライブラリ(台風を参照)を使用する場合は、依存関係の実装から抽象化します。
自動レイアウトを使用した手動レイアウト
さまざまなツール、最も便利なツール-PureLayoutおよびCartography(迅速に)を使用しました。
問題は次のとおりです。
- より多くのコード(約1.2倍)。
- 可視性なし
- 洗練されたレイアウトが地獄に変わる
長所:
-
少し高速-Xib / Storyboardファイルの解析を節約NSKyedArchiver th。 - すべてが宣言型であり、すべてが1か所にあります(ストーリーボードとテキストを絶えず切り替える必要はありません)。
- アニメーション(パンなど)を作成する方が便利です。
手動レイアウト
問題は次のとおりです。
- 正しく実装されていない場合、ハードコーディングされた値があります(正しい場合は、パディングのみなど。さらに、これは個別のヘッダーでレンダリングできます)。
- より多くのコード(約1.5回)。
- 可視性なし
- 外部ビューのパラメーターを変更するときは、フレームの適切な変更に注意する必要があります
- サイズクラスなし
長所:
- 適切な実装により、すべてが非常に柔軟になります。
- より速く動作します。
- バックグラウンドスレッドでフレームを計算し、後で適用することができます。
まとめ
[Stobyboard、Xib、Autolayout]のそれぞれが放棄されると、作業がより複雑になり、コードが大きくなります。
次の場合は、ストーリーボードを使用しないことをお勧めします(必ずしも完全ではありません)。
- 複雑なアニメーションを作成します(たくさんのアウトレットを投げる必要はありません)。
- アーカイブの復旧時間が重要になります。
- 多くの松葉杖があります(通常、それらのほとんどは正しいアーキテクチャやメソッドのスウィズルによって排除されます)。
TableView / CollectionViewに必要なリソースをStoryboardまたはXibで実行しないでください(ファイルの解析に時間がかかり、 柔軟性が失われます )。 最適化中に、最初に自動レイアウトを使用してそれを行うことができますが、ラグが通らない場合-ツールで測定し、レイアウトが遅くなっていることを確認してから、手動アカウントに切り替えます。
場合によっては、TableViewCellとCollectionViewCellの両方に同様のコンテンツを表示する必要があります。 手動レイアウトでは、これは問題になりません。 Xibを使用する場合、たとえば、次のように解決されます。セルの内容はxibファイルにタイプセットされ、初期化セルでは、指定されたビューでaddSubviewを呼び出します。
編集:
要約すると、Storyboardには手動レイアウトよりも次の利点があると言えます。
- 可視性(コード内のレイアウトは、多くの場合、その作成者だけが「理解できる」 -DmitrySpb79 によるコメントを 参照 )。
- 複数のストーリーボードを使用すると、さまざまなユーザーストーリーを共有でき、チーム開発で競合が発生する可能性が低くなります。
- 必要に応じて、別のストーリーボードのストーリーボードの1つでコントローラーを使用します。iOS8では、 ストーリーボードリファレンスとvisputの このコメントを使用できます。 iOSバージョン<8をサポートする必要がある場合は、Xibsを使用するか、何らかの方法でアナログStoryboard Referenceを実装できます。
必要な場合は手動レイアウトを使用し、自動レイアウトがボトルネックになる場合はフレームに移動します( コメントを参照)。