gpt4 book ai didi

ios - 如何在不重叠状态栏的情况下在 iOS7 上呈现 View Controller

转载 作者:IT王子 更新时间:2023-10-29 08:05:19 27 4
gpt4 key购买 nike

当我将我的应用程序迁移到 iOS 7 时,我看到在呈现 View Controller 时导航栏出现在状态栏下方。我想很多人都遇到过同样的问题。这是我所看到的屏幕截图:

existing nav

要求:

  • 新 View 必须以“模态方式”出现,即我需要 presentViewController。

  • 显示某种导航栏或工具栏,状态栏采用 iOS 7 风格的导航栏背景颜色。

  • 它必须在 iOS 6 上运行。

  • 我正在使用 xib 来处理布局,并启用了自动布局。

选项:

A.将 View 的框架向下移动一点。

呃,我们是不是又回到了 iOS 出现之前的 5 天,还在忙着处理框架?此外,与自动布局混合通常不是一个好主意。

B.在导航栏下方的顶部添加一个小间隙。

选项 A 和 B 的一个缺点是状态栏不会融入您的导航栏:

nav with gap

C.以编程方式添加约束。

主要缺点是您必须处理约束以及计算导航和状态栏高度。呸。

D.拉伸(stretch)导航栏/工具栏的高度以包括状态栏的区域。

在 iOS 7 上看起来不错,但在 iOS 6 上会损坏。您需要以编程方式更新导航栏的高度,并确保 View 的其余部分适当更新。凌乱。

enter image description here

E.在 IB 中处理 iOS6/7 增量。

多个缺点:您将对 ios6/7 增量进行硬编码。也不适用于自动布局。

F.使用嵌套的 UINavigationController。

这是我选择的解决方法。请参阅下面的答案。

uinavcontroller workaround

最佳答案

我发现的最简单的解决方法是将要呈现的 View Controller 包装在导航 Controller 中,然后呈现该导航 Controller 。

MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];

优点:

  • 无需处理框架。
  • 相同的代码适用于 iOS 6 和 iOS 7。
  • 没有其他变通办法那么难看。

缺点:

  • 您可能希望让 XIB 中没有导航栏或工具栏,并以编程方式将 UIBarButtonItems 添加到导航栏。幸运的是,这很容易。

关于ios - 如何在不重叠状态栏的情况下在 iOS7 上呈现 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18912290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com