我有一个带有工具栏的多视图应用程序。根视图控制器控制工具栏,但其他视图有自己的视图控制器类。我使用这样的代码来加载视图:
-(IBAction)loadBand1Start:(id)sender{
[self clearView];
Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
self.band1Start = band1Controller;
[band1Controller release];
[self.view insertSubview:band1Start.view atIndex:0];
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
band1Start.view.frame=CGRectMake(0, 0, 480.0, 260.0);
} else {
band1Start.view.frame=CGRectMake(0, 0, 320.0, 400.0);
}
}
IF 语句是让它以正确的方向加载。没有这个,虽然它可以旋转,但它总是以纵向加载,即使手机是横向的。
自动调整大小和自动旋转工作。我使用 IB 来构建我的纵向笔尖。当手机旋转到横向时,它们会旋转和调整大小,但是对于一些笔尖,旋转的布局看起来不正确。有重叠等,这是一个常见问题,我知道可以使用 CGRectMake 修复。
但是,我将 CGRectCode 放在哪里并不重要,它不会执行。我试过把它放在 willRotateToInterfaceOrientation、willAnimateRotationToInterfaceOrientation 和 viewWillAppear 中,但是旋转后的布局没有改变。
如果我使用下面的代码来切换视图,旋转的布局就是我想要的,但工具栏没有出现:
-(IBAction)loadBand1Start:(id)sender{
[self clearView];
Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
[self presentModalViewController:band1Controller animated:NO];
[band1Controller release];
}
我认为这是因为工具栏的视图控制器需要是工具栏出现的根视图控制器,但只有根视图控制器接收方向更改通知。
因此,如果我将工具栏控制器保留为根视图控制器,则子视图的控制器不会收到方向通知,因此不会执行我的 CGRectMake 代码,但是如果我将子视图的控制器设为根视图控制器,它会收到通知,但是工具栏没有出现,因为它的控制器不是根控制器。
我对这里的问题是否正确?有办法解决吗?