0

スーパービュー、loadView()、viewDidLoad()、viewWillAppear()で完全に迷っています。

最終的に、コントローラーのフレームをスーパービューの境界に設定し、viewDidLoad() で [self.view bounds] を利用したいと考えています。(もしかしてこれは無理?)

ここに私に悲しみを与えるコードスニペットがあります..

// add the controller's view to the scroll view
if (nil == controller.view.superview) {
CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [scrollView addSubview:controller.view];
    // I'd like to set controller.view 's frame using superview(scrollView here).
}

どうやら、nil == controller.view.superview はコントローラーの viewDidLoad を呼び出します。

以前は [self.view bounds] にアクセスして viewDidLoad 内で使用して
いましたが、スーパービューにビューを追加した後にビューのフレームを設定したいので、[self.view bounds] を使用するコードを別の場所に移動する必要があると思います。
引越し先はどこがいい?または、より良いアプローチはありますか?

4

2 に答える 2

0

問題と解決策を要約します。

問題は、本質的に、viewDidLoadとaddSubviewの2つの関数呼び出しの順序を切り替えることができないことです。

私が欲しいのは、
addSubviewの後でのみ実行できるスーパービューに従って子のフレームを設定することです。
しかし同時に、viewDidLoadで、適切な[self.viewbounds]があります。

addSubviewの前にviewDidLoadを呼び出す必要があるため、viewDidLoadは正しい[self.viewbounds]情報を持つことができません。

解決策として、superViewBounds変数を宣言し、View Controllerを割り当てた後、ビューを作成する前に設定しました。そして、viewDidLoad内でbounds変数を使用しました。

1つ残っているのは、navigationViewControllerのメインビュー(ナビゲーションビューと呼ばれると思います)の境界/フレーム情報を取得する方法がまだわからないことです。

それがお役に立てば幸いです。もしあれば、誰かがより良い解決策を投稿することを願っています。

于 2010-11-10T03:20:39.090 に答える
0

最初の呼び出しによりcontroller.viewself.viewビューの読み込みメカニズムと各ビュー コントローラーの viewDidLoad 通知が自動的にトリガーされます (self別のビュー コントローラーであると想定しています)。したがって、各コントローラーの viewDidLoad メソッドは、このコード スニペットの先頭で呼び出されます。

(loadViewビューの読み込みプロセスを手動でオーバーライドするためのメソッドです。直接呼び出すべきではありません)

于 2010-11-09T10:43:01.383 に答える