9

在针对 iOS 6.0 SDK 构建我的 iPad 应用程序后,我的 UISplitViewController 的详细视图出现了这种奇怪的行为。详细视图的位置比应有的位置低 20 像素(点/40 像素)。

在此处输入图像描述

这是 5.1 下的样子:

在此处输入图像描述

对于 Interface Builder 中的 DetailViewController_iPad.xib,我已将 Simulated Metrics > Top Bar 设置为 None。这没有帮助。我已经记录了视图框架:

- (void) viewDidLayoutSubviews {
//.. etc
NSLog(@"viewDidLayoutSubviews: %@", CGRectCreateDictionaryRepresentation(self.view.frame) );
}

这将高度记录为 684 而不是它应该是的高度:704。

Height = 684; Width = 703; X = 0; Y = 0;

有没有人有这种事情的经验?接下来我应该尝试什么?

更新:这个问题似乎是间歇性的,有些编译会导致它,有些则不会。

如果其他人遇到此问题并找出原因,我仍然很想知道。

4

7 回答 7

9

我有完全相同的问题!

当导航控制器中存在另一个视图控制器并且此拆分视图控制器在应用程序启动期间在方法application:didFinishLaunchingWithOptions:中推送时,将出现此问题。

这解决了我的问题:

推送我使用的splitViewController时

dispatch_async(dispatch_get_main_queue(), ^{

     [self.navigationController pushViewController:splitViewController animated:NO];

})

代替

[self.navigationController pushViewController:splitViewController animated:NO];

我仅将它用于 iOS6,否则第一个视图将暂时显示在 OS < iOS6 中。

于 2012-10-04T14:20:59.190 回答
2

我假设您没有做任何事情来影响代码中的视图框架,对吗?是视图的控制器在做所有的布局?如果是这样,您是否尝试过修补-wantsFullScreenLayout

当视图控制器呈现其视图时,它通常会缩小该视图,使其框架不会与设备的状态栏重叠。将此属性设置为 YES 会导致视图控制器调整其视图的大小,以便它填满整个屏幕,包括状态栏下方的区域。(当然,要做到这一点,托管视图控制器的窗口本身必须调整大小以填满整个屏幕,包括状态栏下方的区域。)如果您具有半透明状态,通常会将此属性设置为 YES栏并希望您的视图内容在该视图后面可见。

如果此属性为 YES,则视图不会调整大小以使其与选项卡栏重叠,但会调整其大小以与半透明工具栏重叠。无论此属性的值如何,导航控制器始终允许视图与半透明导航栏重叠。

此属性的默认值为 NO,这会导致视图被布置,因此它不会在状态栏下方重叠。

请注意,-wantsFullScreenLayout实际上应该只影响窗口的根视图控制器。因此,如果这解决了您的问题(并且您没有对视图控制器层次结构做任何愚蠢的事情),请向 Apple 提交错误!

于 2012-10-03T01:57:25.147 回答
1

也许[UIViewController statusBarHidden]设置NO在您的详细控制器上?

于 2012-09-25T13:01:45.390 回答
1

Xcode 4.5 有一个应用自动布局的习惯,这可能是你的一些悲伤的原因 - 检查它并尝试取消选择它。

于 2012-10-03T01:44:58.840 回答
1

您是否在 xib 文件中或以编程方式设置了高度的 autosizng 属性,如果是,请尝试删除它们并查看它是否有助于解决问题。

于 2012-10-03T06:01:51.420 回答
0

可能会有所帮助。我也受到了同样的问题的影响,我只是在我的示例中减小了视图的大小:我在 iPhone 应用程序的 XIB 中有 480 像素的高度,我将其减少到 460 像素。请同样为 iPad 做不确定,但可能会有所帮助。

于 2012-10-04T09:07:40.080 回答
0

当我尝试在 ViewWillAppear 方法中呈现另一个视图控制器时,我遇到了同样的问题。我通过将 presentViewController 代码移动到 ViewDidAppear 方法解决了这个问题。希望它会有所帮助。

于 2014-01-08T04:21:52.173 回答