在针对iOS 6.0 SDK构建我的iPad应用程序后,我通过UISplitViewController的详细视图得到了这种奇怪的行为。详细视图的位置比应有的低20个像素(点/ 40像素)。
以下是5.1下的内容:
对于Interface Builder中的DetailViewController_iPad.xib,我设置了模拟指标>顶部酒吧无。这没有用。 我已经记录了视图框架:
- (void) viewDidLayoutSubviews {
//.. etc
NSLog(@"viewDidLayoutSubviews: %@", CGRectCreateDictionaryRepresentation(self.view.frame) );
}
这将高度记录为684而不是它应该是:704。
Height = 684;
Width = 703;
X = 0;
Y = 0;
任何人都有这方面的经验吗?我接下来应该尝试什么?
更新:这个问题似乎是间歇性的,有些编译导致它,而有些则没有。
如果有其他人遇到这个问题并找出原因造成的,我仍然很想知道。
答案 0 :(得分:9)
我有完全相同的问题!
当导航控制器中有另一个视图控制器并且在应用程序启动期间在方法应用程序:didFinishLaunchingWithOptions:中推送此拆分视图控制器时,将发生此问题。
这解决了我的问题:
当按下 splitViewController 时,我使用了
dispatch_async(dispatch_get_main_queue(), ^{
[self.navigationController pushViewController:splitViewController animated:NO];
})
而不是
[self.navigationController pushViewController:splitViewController animated:NO];
我仅将此用于iOS6,否则第一个视图将暂时显示在OS< iOS6的。
答案 1 :(得分:2)
我假设你没有做任何事情来影响代码中的视图框架,对吗?这是视图的控制器正在进行所有布局?如果是这样,您是否尝试过修改-wantsFullScreenLayout
?
当视图控制器显示其视图时,它通常会缩小该视图,使其框架不会与设备的状态栏重叠。将此属性设置为YES会导致视图控制器调整其视图大小,使其填满整个屏幕,包括状态栏下的区域。 (当然,为此,托管视图控制器的窗口本身必须调整大小以填充整个屏幕,包括状态栏下方的区域。)如果您具有半透明状态,通常会将此属性设置为YES bar,并希望您的视图内容在该视图后面可见。
如果此属性为YES,则视图的大小不会导致其重叠标签栏,但会调整为重叠半透明工具栏。无论此属性的值如何,导航控制器始终允许视图覆盖半透明导航栏。
此属性的默认值为NO,这会导致视图布局,因此它不会覆盖状态栏。
请注意,-wantsFullScreenLayout
应该只影响窗口的根视图控制器。因此,如果这可以解决您的问题(并且您没有对视图控制器层次结构进行任何愚蠢的操作),请向Apple提交错误!
答案 2 :(得分:1)
您的详细控制器上的[UIViewController statusBarHidden]
可能设置为NO
吗?
答案 3 :(得分:1)
Xcode 4.5有习惯使用自动布局,这可能是你悲伤的原因 - 检查一下并尝试取消选择它。
答案 4 :(得分:1)
您是否在xib文件中或以编程方式设置了高度的autosizng属性,如果是,请尝试删除它们并查看它是否有助于解决问题。
答案 5 :(得分:0)
可能有帮助。 我也遇到了同样的问题我只是减少了我的示例中的视图大小: 我在iPhone应用程序的XIB中有480px的高度,我将它减少到460px。 请不要确定iPad也可以提供帮助。
答案 6 :(得分:0)
当我试图在ViewWillAppear方法中呈现另一个viewcontroller时,我遇到了同样的问题。我通过将presentViewController代码移动到ViewDidAppear方法来解决它。希望它会有所帮助。