我试图从一个视图控制器中以模态方式呈现一个视图,该视图控制器包含在另一个视图控制器中(例如,一个标签栏控制器,包含一个视图控制器,以模态方式呈现另一个视图控制器)。
层次结构如:
View Controller 1
view 1 (belonging to view controller 1)
view 2 (belonging to view controller 2)
-> presented view 3 (belonging to view controller 3)
我遇到的问题是,在 ipad 上,呈现的视图控制器出现在状态栏下方,而呈现的视图控制器在状态栏后面可见。我希望视图填满整个屏幕并坐在状态栏后面。
奇怪的是,如果我从视图控制器 1 呈现模态,它工作正常,如果我尝试从视图控制器 2 呈现它,我会遇到这个问题。
另一个奇怪的事情是,如果我在 iphone 模拟器中运行相同的代码,没有问题,可以按预期工作,但是如果我在 ipad sim 中运行它,就会出现这个问题。
例如:
红色视图是属于视图控制器 2 的视图,绿色是视图控制器 3。
如您所见,在 iphone 上,视图控制器 3 覆盖了整个屏幕,而在 ipad 上,它位于状态栏下方。
为了测试这一点,在 xcode 中创建一个新的单视图通用项目,并将以下代码添加到创建的视图控制器中的 viewDidAppear 方法中,并在 iphone 和 ipad 模拟器中运行:
-(void)viewDidAppear:(BOOL)animated
{
UIViewController *vc1 = [UIViewController new];
vc1.view.backgroundColor = [UIColor redColor];
[self.view addSubview:vc1.view];
UIViewController *vc2 = [UIViewController new];
vc2.view.backgroundColor = [UIColor greenColor];
[vc1 presentViewController:vc2 animated:YES completion:nil];
}
有人有什么想法吗?根据苹果过渡指南,我已经尝试了新的 edgesForExtendedLayout 属性等的所有组合。我必须避免向 vc2 添加任何内容。
在此处创建了 2 个示例项目,显示了呈现模式的选项卡栏应用程序和呈现模式的非选项卡栏项目之间的区别。两者都以相同的方式设置,具有 3 个视图控制器。
iphone和ipad之间的差异似乎很奇怪。
奥利