UISplitView:详细视图不可见
在 application:didFinishLaunchingWithOptions:
中,我添加了一个分割视图:
[self.window addSubview:splitViewController.view];
[self.window makeKeyAndVisible];
splitViewController
来自应用程序委托中加载的 NIB,并且非常简单,左侧有表格视图,并且右侧的一些自定义视图。
在 splitViewController
的 shouldAutorotateToInterfaceOrientation:
中,如果 interfaceOrientation 是 UIInterfaceOrientationPortrait
或 UIInterfaceOrientationPortraitUpsideDown
,我将返回 NO(这更有意义)在我看来,只有在第一次运行时才会这样出现)。
当我在模拟器(SDK 4.2)中运行我的应用程序时,模拟器按照我的预期旋转到横向,但详细视图不可见(为黑色)。左边的表格视图就很好了。
有趣的是,当我向左或向右旋转模拟器 2 次时,详细视图按预期变为可见。
似乎一开始,详细视图位于其他视图后面,我通过记录每个视图控制器的框架来检查它(在shouldAutorotateToInterfaceOrientation:
中):
Details VC frame: {{0, 20}, {768, 1004}}
SiteSelection frame: {{0, 20}, {768, 1004}}
SPLIT VC frame: {{0, 20}, {768, 1004}}
此外,分割视图控制器subviews 给出:
v: <UIView: 0x5c32d60; frame = (0 20; 768 1004); layer = <CALayer: 0x5c335e0>>
v: <UILayoutContainerView: 0x5c94dc0; frame = (0 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x5c94e10>>
因此,似乎由于某种原因,表视图占用了整个 iPad 的窗口框架,并且与详细自定义视图重叠。
这是正确的吗?这背后的原因可能是什么?在 NIB 中一切似乎都很好。我怀疑应该归咎于 shouldAutorotateToInterfaceOrientation:
。我该如何解决这个问题?
In application:didFinishLaunchingWithOptions:
I'm adding a split view:
[self.window addSubview:splitViewController.view];
[self.window makeKeyAndVisible];
splitViewController
comes from NIB loaded in app delegate, and is pretty simple one, with table view on the left, and some custom view on the right.
In shouldAutorotateToInterfaceOrientation:
of splitViewController
I'm returning NO if interfaceOrientation is either UIInterfaceOrientationPortrait
or UIInterfaceOrientationPortraitUpsideDown
(it makes more sense in my up to show up like this only during the 1st run).
When I run my app in the simulator (SDK 4.2), simulator is rotating to the landscape orientation as I expect, but detail view is not visible (is black). Table view on the left is just fine.
What's interesting, when I rotate simulator 2 times left or right, the detail view turns visible as expected.
It seems that at the beginning the detail view is behind some other view, I checked it by logging each view controllers' frame (in shouldAutorotateToInterfaceOrientation:
):
Details VC frame: {{0, 20}, {768, 1004}}
SiteSelection frame: {{0, 20}, {768, 1004}}
SPLIT VC frame: {{0, 20}, {768, 1004}}
Also, split view controller subviews gives:
v: <UIView: 0x5c32d60; frame = (0 20; 768 1004); layer = <CALayer: 0x5c335e0>>
v: <UILayoutContainerView: 0x5c94dc0; frame = (0 0; 768 1004); clipsToBounds = YES; layer = <CALayer: 0x5c94e10>>
So it seems that for some reason table view is taking whole iPad's window frame, and is overlapping with detail custom view.
Is that correct? What could be the reason behind that? In NIB everything seems fine. I suspect that shouldAutorotateToInterfaceOrientation:
is to blame. How can I fix that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你猜怎么着...在 Xcode4 下运行完全相同的代码就可以了。
所以我不清楚 Xcode3.x 或者更可能是 iOS Simulator 下出了什么问题。
Guess what... Running exactly the same code under Xcode4 works just fine.
So it's unclear to me what is wrong under Xcode3.x, or more likely, iOS Simulator.