0

私のプロジェクトには、いくつかの場所に既存のコードがあり、現在のビューの上にモーダル ビューのサイズを変更して中央に配置するために使用navigationController.view.superview.framenavigationController.view.superview.centerれます。確かにボイラープレートとして使用できますが、正直なところ、navigationController.view.superview実際に何を指しているのかわかりません. に特有UINavigationControllersですか?任意のアイデア/コメントをいただければ幸いです。

[編集] コードは次のとおりです。

UIStoryboard *sb = self.storyboard;
MyViewController *vc = (MyViewController *)[sb instantiateViewControllerWithIdentifier:@"MyLoginViewController"];
vc.delegate= self;
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc];
navController.modalPresentationStyle = UIModalPresentationFormSheet;

[self.navigationController presentModalViewController:navController animated:YES];

navController.view.superview.frame = CGRectMake(
                                                navController.view.superview.frame.origin.x,
                                                navController.view.superview.frame.origin.y,
                                                400.0f,
                                                400.0f
                                                );
navController.view.superview.center = self.view.center;

新しいモーダル ビューにナビゲーション コントローラーを使用しない場合、「スーパービュー」を使用する必要はありません。すなわち、

UIStoryboard *sb = self.storyboard;
MyViewController *vc = (MyViewController *)[sb instantiateViewControllerWithIdentifier:@"MyLoginViewController"];
vc.delegate= self;

[self.navigationController presentModalViewController:vc animated:YES];

vc.view.frame = CGRectMake(
                                                vc.view.frame.origin.x,
                                                vc.view.frame.origin.y,
                                                400.0f,
                                                400.0f
                                                );
vc.view.center = self.view.center;

ただし、バックグラウンドで現在の VC を表示することはできません...

4

3 に答える 3

1
  • navigationController- これはおそらくUINavigationController. おそらく文脈を与えていないので、名前からしか推測できないと思います。

  • navigationController.view- ナビゲーション コントローラーのビュー。

  • navigationController.view.superview- ナビゲーション コントローラーのビューのスーパービュー。つまり、ナビゲーション コントローラーのビューが含まれるビューです。

  • navigationController.view.superview.frame- ナビゲーション コントローラーのビューのスーパービューのフレーム。つまり、ナビゲーション コントローラーのビューが位置するビューのフレーム (位置とサイズ)。

  • navigationController.view.superview.center- ナビゲーション コントローラーのビューのスーパービューの中心。つまり、ナビゲーション コントローラのビューが位置するビューの中心 (中心点の位置) です。

これらのプロパティをそのように直接使用するのは醜いです。何かをするために、なぜそのようにビュー階層の奥深くまで掘り下げたいと思うのか、私には理解できません。これは私にとって悪臭です。問題を解決する正しい方法を見つけることをお勧めします。

于 2012-10-22T19:12:21.423 に答える
1

ほとんどの場合、それはおそらく のインスタンスを指しますUIWindow。画面の中央に配置しようとしている場合は、 を使用してデバイスの画面の四角形を取得できます[UIScreen mainScreen].applicationFrame

于 2012-10-22T19:12:43.490 に答える
0

UIViewのドキュメントで説明されているように、このメソッド-superviewはビュー階層内のビューのスーパービューを返します。つまり、スーパービューは、ナビゲーション コントローラーのビューを含むビューです。これは UINavigationController に固有のものではありません。

于 2012-10-22T19:12:20.400 に答える