6

サンプルのストーリーボードからのこのドキュメントの概要は、私が作業しているものを示しています。

ドキュメントの概要

カスタムコンテナビューコントローラと2つのコンテンツビューコントローラが埋め込みセグエを介して接続されています。

これがストーリーボードそのものです。

ストーリーボードの概要

ZetaViewControllerは、いくつかのプログラムビューを作成する必要があります(もちろん、ZetaView内に)。プログラムで作成されたこれらのビューを中央に配置しているときに、実際には中心から外れているように見えることに気付きました。

ZetViewControllerは、 self.view.bounds.size.heightself.view.bounds.size.widthを調べ、適切な計算を行うことで、物事を中心に置いています。

ZetaViewControllerにデバッグログを追加したとき、self.view.bounds.size.heightself.view.bounds.size.widthのサイズがContainerView(768 x 1004)であり、 ZetaView(728 x 637)ではないことに気付きました。IBのサイズインスペクターはこれらの値を確認します。

ZetaViewのタグ属性に固有の値を作成してログに記録しました。タグ値がそれを確認するので、ZetaViewController.viewは実際にはZetaViewです。

では、何が起こっているのでしょうか。ストーリーボードとサイズインスペクターに小さいサイズで明確に表示されているZetaViewが、実行時にプロパティに間違った値を表示するのはなぜですか?

4

2 に答える 2

7

私の問題は、ストーリーボード、セグエ、またはカスタムコンテナビューコントローラとコンテンツビューコントローラとは何の関係もありませんでした。これは、iOS5で導入された新しいCocoaAutoLayout機能と関係がありました。

私の問題は、ビューの境界サイズをinviewDidLoadではなくinで検査することから発生しましたviewWillLayoutSubviews。が呼び出された時点viewDidLoadでは、ViewControllerのビューにはまだ適切なサイズが指定されていません。プログラムでビューを中央に配置するコードをに移動するとviewWillLayoutSubviews、期待どおりに機能しました。レイアウトが変更されると繰り返し呼び出されるため、ビュー作成コードはそのままにしておきます。viewDidLoadviewWillLayoutSubviews

iOS用ビュープログラミングガイドのセクション「ビューのレイアウトを手動で調整する」も参照してください。

于 2012-10-22T21:58:16.160 に答える
4

わかりました、私が見つけた優れた投稿を指摘します:(更新) http://kevindew.me/post/18579273258/where-to-progmatically-lay-out-views-in-ios-5-and

自動レイアウトが魔法をかけた後、ビューにシャドウキャレイヤーを追加するのにひどい時間を過ごしていました。viewDidLoad、viewWillLoadなどはすべてが正しくレイアウトされていませんでした。

viewWillLayoutSubviewsが何度も呼び出され、状態が完全に設定されていません。しかし...viewDidLayoutSubviewsでは、最終的にすべてが期待どおりに設定されました。

于 2013-02-23T00:27:19.600 に答える