我正在实现一个应用程序,其中我使用了几个视图控制器。但是当我更改viewcontroller时,我发现了我的应用程序的奇怪行为。让我解释一下:
我们在第一个viewcontroller中,他的init方法是:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
Menu = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)];
self.view.backgroundColor = [UIColor greenColor];
[self.view addSubview:Menu];
[Menu release];
}
return self;
}
之后,要更改viewcontroller并从第一个传递到另一个,我调用此方法:
-(void)GoPlay
{
if (!parametresviewcontroller)
{
parametresviewcontroller = [[ParametresViewController alloc]init];
}
UIView *menuView = menuviewcontroller.view;
UIView *paramView = parametresviewcontroller.view;
[menuviewcontroller viewWillAppear:NO];
[parametresviewcontroller viewWillDisappear:NO];
[menuView removeFromSuperview];
[self.view addSubview:paramView];
[menuviewcontroller viewDidAppear:NO];
[parametresviewcontroller viewDidDisappear:NO];
}
所以第二个viewcontroller的init方法被调用,我把它放在下一个:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
Parametres = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480.0)];
Parametres.backgroundColor = [UIColor redColor];
[self.view addSubview:Parametres];
[Parametres release];
}
return self;
}
结果是:
为什么会发生这种奇怪的行为?我真的不明白为什么第一个和第二个之间存在差距...... 谢谢 ! =)
答案 0 :(得分:1)
好的,问题是,这两个类都是UIViewController
,并且您为statusbar
ViewController
View
XIB
文件中的subView
设置了ViewController
。当您设置StatusBar时,视图框架将其y更改为20像素,表示您已将其设置为0,但最初为20。
因此,在执行此设置之前,在第一个
ViewController
的视图中添加{{1}}秒{{1}}的视图时: secondViewController.view.frame = firstViewController.view.bounds; 。这将解决您的问题。
答案 1 :(得分:0)
首先,请勿自行调用viewWillAppear
,viewWillDisappear
,viewDidAppear
和viewDidDisappear
,操作系统会在{的某些特定点调用此方法{1}}生命周期。
其次,UIViewController
不是将子视图添加到控制器视图的正确方法,因为您应该使用initWithNibName
,viewWillAppear
或viewDidAppear
。
第三,你正在做的不是viewDidLoad
只是将视图控制器的视图添加到另一个视图控制器视图,更改changing of view controllers
你应该使用UIViewController
和addChildViewController:
方法或使用removeFromParentViewController
答案 2 :(得分:0)
我找到了一个解决方案:iPhone hiding StatusBar shifts view down by 20 pix
使用 [self setWantsFullScreenLayout:YES]; 在我的情况下在init方法中。
谢谢大家!