运行iOS7模拟器时,UIViewController视图的大小不正确

时间:2013-10-09 17:14:53

标签: ios uiviewcontroller uinavigationbar

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

我要在viewDidAppear:方法中强制退出,但这看起来像是黑客......

感谢您的任何见解

enter image description here 编辑:添加了一张图片。你可以看到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方法主体

1 个答案:

答案 0 :(得分: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];