导航控制器调整大小仅适用于纵向?

Posted

技术标签:

【中文标题】导航控制器调整大小仅适用于纵向?【英文标题】:Navigation Controller resizing only works in portrati? 【发布时间】:2011-07-19 10:47:46 【问题描述】:

我正在开发一个在视图控制器中具有导航视图控制器的应用程序。一切正常,除了当它不以纵向启动时,导航控制器的大小不合适并占据了整个屏幕。我有截图是怎么回事。

以下是纵向启动应用程序时会发生的情况here

现在当应用程序以左右横向或纵向颠倒启动时,会发生这种情况here

我不知道是否有人对此问题有解决方案,因为它在顶部有一个空间,因此在发生旋转时总会有间隙。

为了获得更多参考,我已经包含了我的一些代码。

-(void)viewDidLoad
SongsViewController *viewController = [[SongsViewController alloc] initWithNibName:@"SongsViewController" bundle:nil];

dataView = [[UINavigationController alloc] initWithRootViewController:viewController];
[dataView setDelegate:self];
dataView.view.frame = CGRectMake(192, 85, 768 - 192, 1004 - 85 - 44);
[dataView.view setAutoresizesSubviews:YES];
[dataView.view setAutoresizingMask:UIViewAutoresizingNone];

[self.view addSubview:dataView.view];
[viewController release];


- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration

if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation ==       UIInterfaceOrientationPortraitUpsideDown) 

    dataView.view.frame = CGRectMake(192, 85, 768 - 192, 1004 - 85 - 44);



else 

    dataView.view.frame = CGRectMake(192, 85, 1024 - 192, 748 - 85 - 44);




【问题讨论】:

【参考方案1】:

首先,理想情况下,您不应该将 ViewController 的视图作为子视图添加到另一个 viewController 的视图中。至少在 ios

您必须做的是使用嵌入在导航控制器中的 ViewController 的视图来启动您的应用程序。我的意思是,尝试将应用程序的根视图控制器设为navigationController。或者,如果您有一个 tabBar 作为应用程序的基础,请尝试将每个选项卡的 viewController 设置为 navigationController。

接下来,使用 viewController 的属性:

self.navigationController

进一步推入/弹出视图控制器。

您无需在旋转委托方法中进行那些框架调整,您只需为 SongsViewController 的视图组件(的子视图)正确设置自动调整大小的掩码,其余的一切都应自动处理。

【讨论】:

将查看隐藏在子视图中的自动调整大小。我知道视图控制器内部的导航控制器是非常规的,但我需要它能够在右侧的列表中移动。【参考方案2】:

使用不同的旋转功能似乎可以解决问题。 我用过:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation duration:(NSTimeInterval)duration

【讨论】:

以上是关于导航控制器调整大小仅适用于纵向?的主要内容,如果未能解决你的问题,请参考以下文章

segues 仅适用于导航控制器吗? [关闭]

横向模式下的导航控制器堆栈,但总是以纵向帧大小模态呈现视图控制器视图

当 UISplitViewController 旋转为纵向时,如何调整 UINavigationController 内容的大小

旋转到横向时自动调整 UINavigationBar 的大小

titleView 仅适用于一个视图控制器(self.navigationController 为 nil)

如何仅支持一个 UIView 的横向/纵向方向