iOS7 UISplitViewController 状态栏

Posted

技术标签:

【中文标题】iOS7 UISplitViewController 状态栏【英文标题】:iOS7 UISplitViewController status bar 【发布时间】:2013-10-01 12:18:02 【问题描述】:

我正在尝试将 splitview 控制器添加为子视图控制器。父视图控制器是导航控制器。导航栏对于父视图控制器是隐藏的,我想将状态栏显示为 ios 6 标准。我已将 splitview 控制器添加为子视图控制器,因为我想从 splitview 控制器推送到另一个视图控制器。

我面临的问题是,当我添加 splitview 控制器时,状态栏在内容上重叠。为 masterview、detailview、parentview、splitview 设置 edgesForExtendedLayout 为 UIRectEdgeNone 似乎不起作用。

请让我知道我可以应用的解决方案,以防止内容与状态栏重叠并将状态栏显示为 ios 6 标准。

我尝试使用 MGSplitViewController,但遇到了同样的问题。

谢谢。

【问题讨论】:

有同样的问题。也很好奇。似乎 Apple 推荐的技术不适用于 SplitViewController。例如参见:developer.apple.com/library/ios/qa/qa1797/_index.html 你知道了吗?我对 UISplitViewController 也有同样的问题,和你一样,我已经尝试为所有可能的视图控制器设置 edgeForExtendedLayout 无济于事。谢谢。 【参考方案1】:

我有完全相同的问题,并且能够解决这个问题。我在根目录有一个 UITabBarController,在前两个选项卡上都有一个不同的 UISplitViewController。对于我的一些细节视图,我让它与顶部的导航栏和底部的标签栏重叠。

我一开始也尝试设置edgesForExtendedLayout,但没有成功,但事实证明你需要尽早设置它才能生效。你没有在你的问题中具体说明你在哪里设置你的属性,所以我希望这对你也有帮助:在你的 UIViewController 的-viewDidLoad 中将edgesForExtendedLayout 设置为UIRectEdgeNone

这是为我修复它的代码,而之前在 -viewWillLayoutSubviews 中的尝试完全没有效果:

- (void)viewDidLoad

    [super viewDidLoad];

    // Prevent detail screen from sitting underneath navigation bar and tab bar:
    self.edgesForExtendedLayout = UIRectEdgeNone;

希望对你有帮助……

埃里克

【讨论】:

【参考方案2】:

当你说:

我正在尝试将拆分视图控制器添加为子视图控制器。

您的意思是将 UISplitViewController 设置为 rootViewController 吗?如果不是,那可能就是它表现得很奇怪的原因。

但是 UISplitViewControllers 并非设计为以这种方式工作,请参阅此答案https://***.com/a/2642701/383603

我会使用容器视图控制器来创建自定义拆分视图控制器:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

这里有很多好的链接:Container View Controller Examples

显然,必须重新创建它有点烦人,但至少你可以完全控制它的行为。

【讨论】:

【参考方案3】:

我认为您必须使用 viewcontrollers 父级,启用导航控制器的子级可能会对您有所帮助。如果没有,那么试试这个tutorial。 这对我很有帮助,希望对你也有帮助。

【讨论】:

以上是关于iOS7 UISplitViewController 状态栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS7 的视图大小和位置

iOS7 和 Apple Watch

ios7之后的一些更改

iOS7隐藏状态栏

在ios7中绘图时出现延迟

iOS7 后台获取