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