Objective c 什么是navigationController.view.superview?

Objective c 什么是navigationController.view.superview?,objective-c,ios,Objective C,Ios,我的项目在几个地方都有现有代码,它使用navigationController.view.superview.frame和navigationController.view.superview.center来调整当前视图顶部的模式视图的大小并将其居中。当然,我可以把它们用作锅炉板,但老实说,我不知道navigationController.view.superview真正指的是什么。它是特定于UINavigationControllers?如有任何想法/意见,将不胜感激 [编辑]以下是代码: U

我的项目在几个地方都有现有代码,它使用
navigationController.view.superview.frame
navigationController.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…

如中所述,方法
-superview
返回视图层次结构中视图的superview。也就是说,superview是包含导航控制器视图的视图。这并非特定于UINavigationController。

  • navigationController
    -这很可能是一个
    UINavigationController
    。我说可能是因为你没有给出任何上下文,所以我只能从名字来假设

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

  • navigationController.view.superview
    -导航控制器的视图的superview。i、 e.导航控制器视图所在的视图

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

  • navigationController.view.superview.center
    -导航控制器视图的superview中心。i、 e.导航控制器视图的中心(中心点位置)


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

在大多数情况下,这可能是指您的
UIWindow
实例。如果您试图将内容集中在屏幕上,可以使用
[UIScreen mainScreen].applicationFrame

获取设备屏幕的矩形。谢谢。这就是语法告诉我的,但我不明白为什么有必要处理superview(不管它是否是丑陋的低级趣味)。它似乎是特定于导航控制器的。我可以通过简单地设置UIView的“帧”和“中心”属性来调整UIView的大小和居中,而无需参考其superview。原来的代码是这样的:'我怎么能在注释中输入新行?!--我想不是。我会用代码编辑我的原始帖子。代码看起来很疯狂。我不会那么做的。我关于臭味的观点站得住脚!这就是我所希望的答案——navController.view.superview超越了其他东西;不幸的是,我不认为(根据我问题中新提供的代码)新的模态视图会创建UIWindow/UIScreen的另一个实例——或者是这样吗?!我知道每个视图都可以有一个superview,在这种情况下,它肯定不是导航控制器所特有的。我的问题是为什么我需要参考navController视图的superview。