2

我有一个自定义 UIViewController ,它创建一个视图,其中包含顶部的操作栏(带有 4 个按钮的视图)、一个表视图,然后是表视图下方的另一个视图。布局全部在代码中完成,不使用自动布局。一切都在 iOS 7.0 和 7.0.2 的各种设备上完美运行,但在模拟器中,控制器的根视图锚定在屏幕的右上角 (0,0) 而不是导航栏下方。

我将在 viewDidAppear: 方法中强制中继,但这似乎是一个黑客......

感谢您的任何见解

在此处输入图像描述 编辑:添加图像。您可以看到 UIView 突出显示。正如 ManicMonkOnMac 所提到的,UIView 位于工具栏下方(但这仅发生在模拟器中,在设备上,视图排列良好)在控制器上的 loadView 方法中,我在创建视图时设置了框架:

- (void)loadView
{
    // Our parent view controller will resize us appropriately. The size set
    // here is a convenience for initial view layout.
    self.view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
}

但是这个框架后来被改变了。不过,不是通过我的代码,而是通过 UIkit 代码)

Edit2:添加了 loadView 方法体

4

1 回答 1

3

编辑:在经历了 WWDC 2013 的第 201 届会议之后,我想我有解决方案。

在 iOS 7 中,您可以在视图控制器上设置一个属性,以指定是否希望视图与导航栏重叠。

viewController.edgesForExtendedLayout = UIRectEdgeNone;//UIRectEdgeAll specifies that nav bars should overlap the view.

与 iOS 6 不同,导航栏放置在 iOS 7 中的视图之上。

使用不包括导航栏的帧大小。

代码:

CGRect frame = CGRectMake(self.view.frame.origin.x,self.view.frame.origin.y+self.navigationController.navigationBar.frame.size.height,self.view.frame.size.width,self.view .frame.size.height);

CustomView *view = [[CustomView alloc] initWithFrame:frame];

[self.view addSubview: view];

于 2013-10-09T17:21:09.610 回答