旋转前UIVIewController错误的位置

时间:2010-06-16 00:56:43

标签: iphone uiview uiviewcontroller interface-builder uiwindow

我的申请的起点是这个窗口(白色背景):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    mainScreen = [[MainScreenController alloc] initWithNibName:@"MainScreenController" bundle:[NSBundle mainBundle]];

    // add it to the main window
    [window  addSubview:[mainScreen view]];

    // show view
    [window makeKeyAndVisible];

    NSLog(@"started");

    return YES;
}

MainScreenController是一个由Interface Builder创建的带有(blackBackground)的UIViewController。

应用程序执行完美,但第一次,黑色视图向上移动,如状态iphone面板的高度(在底部留下白色矩形)。

如果我将iPhone旋转两次,视图就会完美地定位在正确的位置,并以黑色背景填充所有屏幕。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

检查IB中的MainScreenController设置。您应该选择模拟状态栏元素(cmd-1),以便视图最初位于状态栏下方。

编辑 - 为什么在这里调用代理中的initWithNibName?我使用的大多数app模板都有OS初始化的主视图nib,你使用IB并在主VC接口中设置IBOutlet。在调用initWithNibName之后,您可能具有{0,0}的初始帧起源。在initWithNibName调用之后添加这些行以验证:

NSLog(@"mainscreen frame=%@", NSStringFromCGRect(mainscreen.view.frame));

CGRect frame = mainscreen.view.frame;
frame.origin.y = 20;  // move below status bar
mainscreen.view.frame = frame;