我检查了其他答案,但没有发现任何真正描述我情况的东西。所以这里。
我有一个基于窗口的应用程序,可以从xib创建和加载UIViewController。它的状态栏已禁用,高度为480,UISegmentedControl的y原点为451.它在屏幕底部显示良好。*
在UIViewController的viewDidLoad中,我创建了一个UIView initWithFrame:CGRectMake(0.0, 0.0, 320.0, 431.0)];
(UISegmentedControl为480 - 29像素,状态栏为20)。我将它添加到带有[self.view addSubview:gameBoard];
的UIViewController。然后将一些UIView游戏片段添加为游戏板UIView的子视图,并且所有内容都显示为我认为它应该是。
当点击其中一些UIView子视图时,会出现一个菜单。我已经创建了一个带有所需控件的UIViewController。我使用委托方法从接收触发事件的子视图调用到根UIViewController - 这样做
self.squadOrders = [[SquadOrders alloc] initWithNibName:@"SquadOrders" bundle:nil];
squadOrders.viewControllerDelegate = self;
[self presentModalViewController:squadOrders animated:YES];
模式对话框显示为我认为它应该从屏幕的下边缘向上滑动,不覆盖状态栏,但覆盖根UIViewController底部提到的UISegmentedControl。
被驳回[self dismissModalViewControllerAnimated:YES];
这就是麻烦开始的地方。 UISegmented控件向下移动20个像素,因此屏幕底部只能看到9个像素。 顶部有一个20像素的白色间隙,视图已向下移动。
*在此或任何其他xib上启用状态栏根本不会改变所描述的行为。
其他相关的stackoverflow问题是:
IPhone - After dismissing Modal View Controller - gap is left at top of page - 但是给定的解决方案是没有另一个视图控制器作为视图控制器的子视图加载显示模态 - 但我没有,只有UIViews。还有一个建议是在模态消失后重置适当的帧,但感觉就像是在作弊。
Contents of UIScrollView shifted after dismissing ModalViewController - 我玩过所有视图和控制器的高度 - 我相信它们匹配,没有帮助。同样,框架可以重置,但它只能解决症状。
还有其他人,但到目前为止还没有解决这个问题。
答案 0 :(得分:0)
我刚刚用视图向下移动解决了这个问题。 这是因为navigationBar.barStyle设置为 UIBarStyleBlackTranslucent 。
答案 1 :(得分:0)
这是一个黑客,但可能会帮助某人。我的应用程序中有大量的这20个像素间隙问题,他们都使用导航控制器作为我的根视图控制器。我根本不把它用作导航控制器(我隐藏导航栏),所以这个解决方案可以在大多数应用程序中使用。
基本上,我有一个BaseView(320 x 480,没有状态栏),其控制器位于我的导航控制器中,然后我的应用程序的其余部分作为子视图添加到BaseView。现在一切都很好。