将视图控制器添加到选项卡时,这是一个常见问题。
从苹果公司的文件(Tab Bar Controllers - Tab Bars and Full-Screen Layout):
标签栏控制器支持全屏幕布局不同于大多数其他控制器支持的方式。如果您希望其视图在状态栏或导航栏(如果存在)的下方,您仍然可以将自定义视图控制器的wantsFullScreenLayout属性设置为YES。但是,将此属性设置为YES不会导致视图与选项卡栏视图重叠。标签栏控制器总是调整您的视图的大小,以防止它在标签栏下面。
在代码的话,你应该做到以下几点:
UINavigationController *myNavController = [[UINavigationView alloc] init];
myNavController.wantsFullScreenLayout = YES;
//...
NSArray* controllers = [NSArray arrayWithObjects:myNavController, nil];
myTabBarController.viewControllers = controllers;
如果然而,你遇到的问题是,在比UIInterfaceOrientationPortrait
您myNavController
的动作来看其他方向打开应用程序时20像素离开屏幕顶部,那么您将根据初始方向动态设置控制器的wantsFullScreenLayout
属性(而不是上述解决方案)。 我用你的导航控制器实现定义一个静态变量它:
static UIInterfaceOrientation _initialOrientation = -1;
之后,你需要重载viewDidAppear:
方法,并适当设置变量:
- (void)viewDidAppear:(BOOL)animated
{
if (_initialOrientation == -1)
_initialOrientation = [[UIApplication sharedApplication] statusBarOrientation];
self.wantsFullScreenLayout = (_initialOrientation != UIInterfaceOrientationPortrait);
[super viewDidAppear:animated];
}
希望这有助于。
为什么不调整帧中的每个旋转'self.view.frame.size.height'? – 2011-03-03 16:55:33
@sudo - 是的,我已经做到了这一点,这有助于...但只有当设备旋转!如果应用程序以纵向(按钮向下)以外的任何方向启动,则它看起来像上一个屏幕截图。我试过的没有任何调整消除了差距。 – 2011-03-03 17:01:33
他们尝试将其设置为[[UIScreen mainScreen]范围] .size.height'? – 2011-03-03 17:03:49