4

私は、かなり複雑なコンテインメント ビュー コントローラー階層を持つエンタープライズ iPad クライアント アプリに取り組んできました。最近、アプリの開始ビューであるサーバー ログイン ビューに再設計を実装する必要がありました。この機会に、自動レイアウトを使用して再設計を実装し、アプリの残りの部分は変更しないことにしました。数日間 WWDC ビデオを見てコードをハッキングした後、ローテーションとキーボードの表示/非表示イベントのために、ログイン テキスト フィールドの位置をアニメーションでスムーズに変更することができました。結果に満足して、リファクタリング ブランチを git マージしましたが、ログイン後にアプリを使用するとアプリがクラッシュし、デバッガーのヒントが表示されませんでした。私は最終的に、自動レイアウトがどういうわけか子コンテナー ビュー コントローラーにカスケードされていることを理解しました。

Main.storyboard には、RootViewController ルート ビュー コントローラーを持つ "メイン" ナビゲーション コントローラーがあり、そのビューは子ビュー コントローラー ビューのコンテナーであり、ログイン ビューから始まり、ユーザーが最後に使用したビュー コントローラーにスワップされます。リファクタリング後、IB では、サーバー ログイン コントローラーで [自動レイアウトを使用] がオンになっています。しかし、突然、自動レイアウトが有効になっていない子ビュー コントローラーの 1 つもチェックされます。そのView Controllerでチェックを外すと、突然、サーバーログインビューコントローラーの自動レイアウトチェックボックスがオフになります。これは、ストーリーボードのすべてのビュー コントローラーで自動レイアウトが有効/無効になっていることを意味しますか?? そうでない場合、誰かが何が起こっているのか知っていますか? Xcode 4.6

4

1 に答える 1

3

Apple 開発者フォーラムの KMT から、ストーリーボード レベルで自動レイアウトが有効になっているという回答がありました。WWDC vids でこの重要な部分を見逃してしまいました。

「自動レイアウトを使用」を有効にして新しいストーリーボード ファイルを作成し、自動レイアウトが有効なビュー コントローラーをそのファイルに移動することで、特定の問題を解決しました。残念ながら、Autolayout がストーリーボード レベルで有効になっていることを発見する過程で、Main.storyboard の任意のオブジェクトで [Use Autolayout] チェックボックスをオフにするたびに、IB が最善の推測による制約を適用して、既存のスプリング/ストラット属性を置き換えました。以前に設定しました。そして、「Use Autolayout」チェックボックスをオフにすると、最良推測のスプリング/ストラット属性が適用され、最良推測の制約が置き換えられました。最終的な結果として、ストーリーボード ファイルの多くのビューにスプリング/ストラットの設定を再適用する必要がありました。

于 2013-02-07T19:48:21.257 に答える