UIView显示位移到顶部

时间:2011-03-16 13:45:04

标签: cocoa-touch uiview uiviewcontroller

我有一个简单的应用程序,它有两个视图控制器。它们都在顶部有一个UINavigationBar作为标题。当用户点击第一个按钮时,第二个UIViewController显示为模态视图。

当我的应用程序首次启动时,初始视图并未完全覆盖主UIView,并且似乎“推”到顶部(见下图)。 enter image description here

点击“说明”按钮后,显示另一个带有presentModalViewController:animated:的视图,并关闭模态ViewController,一切都正确显示。

有人知道我可能做错了吗?

我在viewWillAppear中没有任何内容,这是我的viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    if (!self.model) {
        self.model = [[FRRSushiRiceModel alloc] init];
        [[self.header.items objectAtIndex:0] setTitle:  @"Perfect Sushi Rice: Ingredients"];
    }
}

和我的应用程序:didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    


    // Create and add the main controller (ingredients)
    self.ingredientsController = [[FRRIngredientsViewController alloc] init];
    [window addSubview:self.ingredientsController.view];


    [window makeKeyAndVisible];

    return YES;
}

这个小项目重现了这种行为: Test Case

2 个答案:

答案 0 :(得分:3)

您是否取消了IB中的“想要全屏”设置,UINavigationControllerUIViewController

enter image description here

答案 1 :(得分:1)

我发现了错误,伙计。

基本上我相信系统正确设置我的视图框架以匹配屏幕的可用部分。当您将其添加到控制器的某个控制器(例如UINavigationController)或通过IB添加它时,这种方法有效。

如果以编程方式添加控制器,则需要显式设置视图的框架。一个很好的默认值是:

[[UIScreen mainScreen] applicationFrame] 

表示应用程序可用屏幕的一部分:整个屏幕减去状态栏。