更改viewcontroller时的差距

时间:2013-06-11 21:40:28

标签: ios objective-c uiviewcontroller behavior

我正在实现一个应用程序,其中我使用了几个视图控制器。但是当我更改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;
}

结果是:

Result of changing

为什么会发生这种奇怪的行为?我真的不明白为什么第一个和第二个之间存在差距...... 谢谢 ! =)

3 个答案:

答案 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)

首先,请勿自行调用viewWillAppearviewWillDisappearviewDidAppearviewDidDisappear,操作系统会在{的某些特定点调用此方法{1}}生命周期。

其次,UIViewController不是将子视图添加到控制器视图的正确方法,因为您应该使用initWithNibNameviewWillAppearviewDidAppear

第三,你正在做的不是viewDidLoad只是将视图控制器的视图添加到另一个视图控制器视图,更改changing of view controllers你应该使用UIViewControlleraddChildViewController:方法或使用removeFromParentViewController

答案 2 :(得分:0)

我找到了一个解决方案:iPhone hiding StatusBar shifts view down by 20 pix

使用     [self setWantsFullScreenLayout:YES]; 在我的情况下在init方法中。

谢谢大家!