2

UIViewControllerでViewDidLoad()の前にフレームを設定することは可能ですか?

現在、私はコンストラクターでこれを行います:

View.Frame = _frame;

問題は、この呼び出しが最初にViewDidLoad()関数を自動的にトリガーすることです。ViewDidLoad()で、サブビューを「View.Frame」プロパティに依存して配置します。

ただし、このプロパティは、ViewDidLoad()が完了した後にのみ変更されます。つまり、基本的に「View.Frame=_frame;」です。最初に古い「Frame」値で「ViewDidLoad()」をトリガーし、その後でのみプロパティが変更されます。

最初にクラス変数を「_frame」に割り当てて「ViewDidLoad()」で使用することでこれを解決できますが、別の解決策があるかどうか、ここで何かが足りないかどうかを確認したいと思います。(このフローの背後にある考え方も欠けています)

4

1 に答える 1

2

これは iOS では一般的な状況であり、コンストラクターに対して正しいことをしていると言えます。プロパティでゲッターを呼び出すViewとビューが読み込まれるため、IsViewLoadedこれを確認するためのプロパティが提供されます。

フレームに渡すのがコンストラクターでない場合は、コントローラーで次のようなこともできます。

public void SetFrame(Frame frame)
{
    if (IsViewLoaded) {
        View.Frame = frame;
    else {
        _frame = frame;
    }
}

このシナリオのため、設計について検討する価値があるかもしれません。完全な状況はわかりませんが、コントローラーFrameはクラス内で決定できますか? Frameおそらく、別の値を in に渡してinの計算を行うことができ、ViewDidLoadApple のパターンによりよく一致するでしょう。

于 2013-01-12T14:02:58.713 に答える