navigationController.view.superview究竟是什么?

时间:2012-10-22 19:06:40

标签: objective-c ios

我的项目在几个地方都有现有代码,使用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;

如果我不使用导航控制器进行新的模态视图,我就不必使用“superview”了。即,

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 ......

3 个答案:

答案 0 :(得分:1)

  • navigationController - 这很可能是UINavigationController。我说可能是因为你没有给出任何背景,所以我只能从名字中假设它。

  • navigationController.view - 导航控制器的视图。

  • navigationController.view.superview - 导航控制器视图的超级视图。即导航控制器视图所在的视图。

  • navigationController.view.superview.frame - 导航控制器视图的超视图框架。即导航控制器视图所在视图的框架(位置和大小)。

  • navigationController.view.superview.center - 导航控制器视图的超视图中心。即导航控制器视图所在视图的中心(中心点的位置)。

丑陋直接使用这些属性。我无法想象为什么你会想要去寻找视图层次结构的深度,就像做任何事情一样。这对我来说是bad smell。我建议找到解决问题的正确方法。

答案 1 :(得分:1)

在大多数情况下,这可能是指UIWindow的实例。如果您尝试将内容放在屏幕上,可以使用[UIScreen mainScreen].applicationFrame获取设备屏幕的矩形。

答案 2 :(得分:0)

documentation for UIView中所述,方法-superview在视图层次结构中返回视图的超级视图。也就是说,superview是包含导航控制器视图的视图。这不是UINavigationController特有的。