我有一个带工具栏的多视图应用。 Root视图控制器控制工具栏,但其他视图有自己的视图控制器类。我使用这样的代码来加载视图:
-(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代码,但如果我将子视图的控制器设置为根视图控制器,它会收到通知好的,但工具栏没有出现,因为它的控制器不是根控制器。
我在这里对这个问题是否正确?有办法吗?