为什么我的一些UIViews在导航后会被移动?

mob*_*bob 10 statusbar uiview pushviewcontroller

在我的一些应用程序设计中或仅仅是一些UIViews,在navigationController的pushViewController之后,我的新视图将被移出窗口状态栏的高度.因此,我将此代码存根放在viewDidLoad方法中.

CGRect  frameAt = [self.view frame];
CGRect  statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
frameAt.origin.y += statusBarFrame.size.height;
[self.view setFrame: frameAt];
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义,这是XCode和Interface Builder的意图,所以我怀疑在我的视图设计中我正在做一些根本错误的SDK.此外,在极少数情况下,我不必改变观点,我真的不知道两种设计方法的区别.

另请注意,大多数情况下,我尝试使用IB设计我的视图,并进行一些小的自定义.

有没有其他人遇到这个并知道如果没有这样的代码存根他们会做什么修复?

jam*_*hou 16

我已经使用Apple的NavBar示例代码来尝试重现这个问题.

applicationDidFinishLaunching最初是这样实现的:

[window addSubview:navigationController.view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

如果我改成它:

UIViewController *shellController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
[shellController.view addSubview:navigationController.view];
[window addSubview:shellController.view];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

然后我出现了差距.

但是,如果我只这样做:

UIView *shell = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[shell addSubview:navigationController.view];
[window addSubview:shell];
[window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)

一切看起来都很正常.

所以我想如果它的根视图控制器,每个视图控制器将偏移其视图.但是导航控制器会覆盖此行为以偏移其视图,无论它是否是根视图控制器.因此,我会说你的差距正在出现,因为你的层次结构中的某个导航控制器比预期的要低.