2

私のコンテナは、別のビューをそのビュー階層UIViewControllerに追加します。CustomViewController最初にコントローラーを作成し、次にビューのサイズを変更し、最後にビューに追加します。

    //create the controller
    customController = [[CustomViewController alloc] initWithNibName:nil bundle:nil];
    [customController willMoveToParentViewController:self];
    [self addChildViewController:customController];
    [customController didMoveToParentViewController:self];

    //size and position the controller's view 
    customController.view.frame = CGRectMake(10, 10, 100, 50);

    //add the new controller's view
    [self.view addSubview:customController.view];
    [customController didMoveToParentViewController:self];

サイズ変更の部分が私の問題です。

CustomViewController、プログラムでビューを作成しますloadView。ここで、いくつかのサブビューが追加されます。CustomViewControllerは、ビューがどのようにサイズ変更/配置されるかを実際には認識していないため、単純に初期化されますinit(フレームは提供されません)。

これは単純なUIViewでは問題なく機能しますが、サブビューを追加するとすぐに問題が発生します。フレームがCGRectZeroであるため、これらのサブビューを`loadView'内に配置することは実際には機能しません。さらに、自動サイズ変更マスクを設定して適切に拡大縮小すると、最終的にはすべてのサブビューが拡大してビュー全体を占めるようになります。おそらく、サブビューの座標がすべてビューのフレームの100%であるためです(ビューのフレームがCGRectZeroであるため)。

要するに、私はどのサイズのフレームを使用することになっていますloadViewか?ビューが占めると予想される一般的なビューサイズを想定する必要がありますか?または、サブビューを追加できるが、コントローラーのビューのサイズ変更を延期できる、より良いアプローチはありますか?

4

2 に答える 2

1

UIViewController のビューは、viewWillAppear メソッド (UIViewController のライフサイクルのメソッド) に実際のサイズがあります。したがって、UIViewController クラスをサブクラス化し、そこにサブビューをレイアウトできます。

ですが、おすすめを教えていただきたいです。ビューを作成するには、View Controller の loadView メソッドを使用する必要があります。そうしないと、メモリ管理の問題やビューのレイアウトの問題が発生する可能性があります。UIViewController の loadView メソッドを自動的に呼び出すため、init メソッドでビュー プロパティを呼び出すことはあまりお勧めできません。

UIViewController のライフサイクルの詳細をお読みください。http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

私の提案: 親 UIViewController の loadView を使用してビューを作成します。viewWillAppear のレイアウト ビュー。

幸運を!質問がある場合は、さらに質問してください:)

于 2012-10-03T21:04:03.307 に答える
0

スーパービューに関連してサブビューのフレームを設定できます。お気に入り

subview.frame = CGPointMake(self.view.frame.size.width *0.2,  self.view.frame.size.height *0.2, self.view.frame.size.width *0.8, self.view.frame.size.height *0.8);
于 2012-10-03T20:51:38.567 に答える