我有一个基于 UITabBar 的应用程序,运行得很好。在某些情况下,我会显示不同的 UIViewController。现在让我烦恼的是我必须调整测试笔尖的框架(并且only测试笔尖!)才能正确显示。 (否则视图位于状态栏下方)。
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
if (condition) {
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"Test" bundle:nil];
// FIXME this should NOT be required
CGRect r = vc.view.frame;
r.origin.y += 20;
vc.view.frame = r;
[window addSubview:vc.view];
[window makeKeyAndVisible];
return;
}
[window addSubview:tabViewController.view];
[window makeKeyAndVisible];
}
那么测试笔尖可能有问题吗?不可能。测试笔尖在干净的新项目中按预期工作。新的干净笔尖也会出现同样的症状。那么 MainWindow 笔尖一定有问题,对吗?但 UITabBarController 显示得很好。
我在这里有点困惑并且没有想法。有什么建议如何追踪这个问题吗?
将根视图添加到 UIWindow 可能会很复杂,因为窗口总是位于状态栏下方。因此,根视图的框架必须重置为[[UIScreen mainScreen] applicationFrame]
以防止它也与状态栏重叠。我们通常不必担心这一点,因为 UIViewController 会为我们修改框架......除非它不这样做。这是交易:
- 如果您创建视图控制器
及其视图在同一个 NIB 中,而您
将视图嵌套在视图下方
控制器,它will自动调整视图的框架。
- 如果您创建视图控制器并且
它在同一个 NIB 中的视图,但你
将视图连接到视图
控制器通过控制器的
查看插座而不是嵌套它,控制器will not自动调整视图的框架。
- 如果您在一个 NIB 中创建视图控制器,并通过在 IB 中设置视图控制器的“NIB 名称”属性,将其连接到分离 NIB 中定义的视图,则will自动调整视图的框架,但是only if您还选中了“从 NIB 调整视图大小”。
- 如果您通过调用 -initWithNibName:bundle: 创建视图控制器,则它will not自动调整视图的框架。
- UITabBarController 希望将其视图添加为窗口的根视图,因此始终会自动调整其自己的视图框架以匹配应用程序框架。 (因此,如果您将 UITabBarController 的视图添加为窗口以外的任何内容的子视图,您会注意到奇怪的 20 像素间隙。)
我猜苹果认为 -initWithNibName:bundle: 通常不会用于创建窗口的根视图,因此它不会调整您的情况下的框架。像您所做的那样手动调整它的大小就可以了,实际上在查看 iPhone OS 控制器编程指南 http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html#//apple_ref/doc/uid/TP40007457-CH101-SW25,但你真的应该使用[[UIScreen mainScreen] applicationFrame]
因为状态栏不是always20 像素高(例如,当您打电话时它会更高。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)