0

設計パターンを不適切に実装している可能性があることを示唆する問題に遭遇しました。サイズが言語に依存する動的サブビューがあります。モーダル ビューを表示するときは、viewDidLoad 中にレイアウトを設定します。UILabel オブジェクトが正しく表示されていないことに気付き、viewDidLoad 中のモーダル ビューのサイズがビューが表示されているときのサイズと同じではないことが問題であることがわかりました。

viewDidLoad s 中のモーダル ビューの幅は 768 です。ビューが表示された後の幅は 540 です。

これは、viewDidLoad 中ではなく、viewWillAppear 中にレイアウトを設定する必要があることを示唆しています。

ビューが読み込まれるとレイアウトが変更されないため、これを実行に適用すると、DRY 原則の私の理解と矛盾するようです。そのため、ビューが表示されるたびにレイアウト コードを不必要に繰り返すことになります。(私の例では、モーダルのプレゼンテーション間で言語設定を変更できることはわかっていますが、このタイプのダイナミックが存在しない他の例があるかもしれません。)

viewDidLoad で、同じ方法で非モーダル ビューにレイアウトを実装します。

これを別の方法で行う必要がありますか?

4

1 に答える 1

0

ビューが変わらないと仮定するのは正しくありません。たとえば、向きを変えるとき。ほとんどの場合、正しい自動サイズ変更マスクと組み合わせて、viewDidLoad でビューを設定するだけで十分です。ビューのサイズ変更時の設定をより細かく制御する必要がある場合は、viewWillLayoutSubviews/viewDidLayoutSubviews をオーバーライドし、そこでビューを再配置する必要があります。したがって、viewDidLoad でサブビューを追加してそのコンテンツを取得し、レイアウトでサイズと位置を設定します。

于 2012-06-08T05:22:37.487 に答える