我创建了一个简单的iPhone应用程序,它有两个.xib文件。在应用程序代理中,代理确实完成了启动,我通过调用:
显示第一个.xib文件[window addSubview:myView];
我在IBAction上为UIButton做同样的事情,将视图更改为myView2。
我发现,当我运行应用程序时,两个视图都有一个大约10像素的白条。我还注意到按钮偏移了10个像素(大约)。所以我得到的结论是,视图从屏幕上的10个像素开始显示并且结束时间短。
知道为什么会发生这种情况,我如何解决它,或者我如何进一步调试正在发生的事情?我检查了我的.xib文件,他们正在消耗设备的整个高度(即没有白条),所以这看起来是XCode内部的一个问题。
编辑:我已经把问题缩小了一点。我正在使用两种方法来加载子视图。当我在applicationDidFinishLaunching
内加载第一个视图时,一切都很好。但是,如果我使用window
方法将这两条消息替换为[self originalView]
,那么一切都会变得有点乱。
- (void)applicationDidFinishLaunching:(UIApplication *)application {
//[self originalView]; <- I want to use this instead of the following two lines
// Override point for customization after app launch
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
-(void)endView{
endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
[window removeFromSuperview];
[window addSubview:endV.view];
}
-(void)originalView{
viewController = [[MyAppViewController alloc] init];
[window removeFromSuperview];
[window addSubview:viewController.view];
}
从我所看到的,我总是调用相同的代码行,无论它是在applicationDidFinishLaunching
还是在[self originalView]
内,但似乎window
正在转向成为一个不同的对象。
答案 0 :(得分:12)
当以正常方式使用UIViewController(即pushing it on a UINavigationController)时,它会调整其视图的帧。
由于您手动添加子视图,因此您必须自己调整框架。原点位于右上角(状态栏的顶部)。您希望将视图向下移动20个像素。
答案 1 :(得分:5)
这是我的解决方案:
// adjust the frame of subview which is going to be add
self.navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.view addSubView:self.navController.view];
现在对我来说很好,祝你好运〜:)
答案 2 :(得分:2)
在界面构建器中,您可以添加将以编程方式显示的模拟界面元素(例如状态栏或导航栏)。在检查器中,选择视图,然后转到“属性”选项卡。在这里,您可以模拟状态栏,顶部栏或底栏。
答案 3 :(得分:1)
看起来你在错误的地方调用了这个UIViewController
的pushVC。我有同样的问题。它是通过将[self.navigationController pushViewController: animated:]
从viewDidLoad
移动到层次结构中先前viewDidAppear:
的{{1}}来解决的。
答案 4 :(得分:1)
每当出现奇怪的差距,或者视图部分隐藏在状态栏后面时,它都与
有关我的应用程序中有两个错误并解决了它们!希望我可以节省你一些时间(我浪费了很多)