使用insertSubview显示时,UIViewController在屏幕上被按下

时间:2013-05-22 17:51:54

标签: ios ipad uiviewcontroller xcode4

有一点问题,这是细分:

我的AppDelegate使用了作为rootViewController的视图控制器。此视图控制器的目的是将几个其他视图控制器交换进出,称之为登录和主屏幕。为了简单起见,我删除了我将发布的代码中的任何交换代码,并且让rootViewController只显示它的第一个内容视图控制器,比如登录。

我遇到的问题是内容视图控制器似乎在rootViewController中被推下了一点点。我给rootViewController一个蓝色背景,内容视图控制器为橙色背景。这是我的代码:

AppDelegate.h

#import <UIKit/UIKit.h>

@class MainViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) MainViewController *main;

@end

AppDelegate.m

#import "AppDelegate.h"
#import "MainViewController.h"

@implementation AppDelegate

@synthesize main;

- (void)dealloc
{
    [_window release];
    [main release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    MainViewController *mainVC = [[MainViewController alloc] init];
    self.main = mainVC;
    self.window.rootViewController = self.main;

    [self.window makeKeyAndVisible];

    return YES;
}

MainViewController.h

#import <UIKit/UIKit.h>

@class ContentViewController;

@interface MainViewController : UIViewController

@property (nonatomic, retain) ContentViewController *content;

@end

MainViewController.m

#import "MainViewController.h"
#import "ContentViewController.h"

@implementation MainViewController

@synthesize content;

- (id)init
{
self = [super init];
    if (self ) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blueColor];

    ContentViewController *viewController = [[ContentViewController alloc] init];
    self.content = viewController;
    [self.view insertSubview:self.content.view atIndex:0];              
}

- (void)dealloc {
    [content release];  
    [super dealloc];
}

@end

ContentViewController.h

#import <UIKit/UIKit.h>

@interface LoginVC : UIViewController

@end

ContentViewController.m

#import "ContentViewController.h"

@implementation ContentViewController

- (id)init
{
    self = [super init];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.view.backgroundColor = [UIColor orangeColor];
}

- (void)dealloc {
    [super dealloc];
}

@end

上面的代码给我一个状态栏,下面有一个蓝色条带(大约是状态栏的高度)(主视图控制器),然后橙色内容视图控制器占据屏幕的其余部分。出于某种原因,主视图控制器似乎正在推动内容视图控制器。

奇怪的是,如果我创建一个视图控制器并使用XIB绘制视图,它看起来很好,内容可以直接在主视图的顶部查看。

如果有人能对这个问题有所了解,我会非常感激。

干杯

1 个答案:

答案 0 :(得分:2)

我想你不应该这样做

ContentViewController *viewController = [[ContentViewController alloc] init];
self.content = viewController;
[self.view insertSubview:self.content.view atIndex:0];

而是:

ContentViewController *viewController = [[ContentViewController alloc] init];
self.content = viewController;
[self presentViewController:self.content animated:YES completion:nil];