【问题标题】:UIVIewController wrong position before rotateUIVIewController 旋转前位置错误
【发布时间】:2010-06-16 00:56:43
【问题描述】:

我的应用程序的起点是这个窗口(白色背景):

- (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 是一个 UIViewController,带有由 Interface Builder 创建的 (blackBackground)。

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

如果我将 iPhone 旋转两次,视图会完美定位在正确的位置,黑色背景会填满整个屏幕。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: iphone uiview uiviewcontroller interface-builder uiwindow


    【解决方案1】:

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

    编辑 - 你为什么在你的委托中调用 initWithNibName ?我使用的大多数应用程序模板都有由操作系统初始化的主视图笔尖,您使用 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;
    

    【讨论】:

    • 其实我这个模拟状态栏是灰色的,所以不知道是什么问题...
    • @zegnus:我已经编辑了我的答案。我认为问题在于您如何初始化主屏幕的视图。
    • 我已经使用顶部的导航栏重新构建了所有布局,现在一切正常。感谢您的建议!
    • 不客气。感谢您投票并接受我的回答:-(
    • 对不起,我没有意识到这一点!去!
    猜你喜欢
    • 2021-10-11
    • 2011-11-18
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2010-10-07
    • 2011-04-10
    相关资源
    最近更新 更多