【问题标题】:Keeping UINavigationBar at same size while hiding status bar隐藏状态栏时保持 UINavigationBar 大小相同
【发布时间】:2013-11-06 09:30:58
【问题描述】:

我一直在尝试阻止 UINavigationBar 在调用 setNeedsStatusBarAppearanceUpdate 时移动/调整大小。

当状态栏以动画方式隐藏时,我想将导航栏保持在完整的 64 像素高度。

任何帮助将不胜感激!

更新:我能够通过创建一个新的UIWindow 并覆盖状态栏来解决这个问题。

【问题讨论】:

  • 不要认为有任何 API。您可能需要调整窗口大小,可能将wantsFullScreenLayout 设置为NO,等等。
  • wantsFullScreenLayout 在 iOS 7 中是 deprecated
  • 我认为您的标题表明您存在误解。当您隐藏状态栏时,导航确实保持相同的高度(44 点),只是状态栏(20 点)和导航栏看起来是一个视图,而实际上它们是两个不同的视图。你是想用导航控制器来做这件事,还是有一个独立的导航栏?
  • 标题可能会产生误导,但它实际上是导航栏自动执行的“向上移动”动画,而不是仅仅停留在那里。使用导航控制器时会发生这种情况,我有同样的问题。
  • 如果还有人遇到这个问题,this(调整additionalSafeAreaInsets)是唯一对我有用的方法。

标签: ios iphone objective-c cocoa-touch


【解决方案1】:

我遇到了同样的问题,可以通过将 windowLevel 更改为 UIWindowLevelStatusBar 来解决它

【讨论】:

  • windowLevel 应该更改哪个窗口?
  • navigationBar的窗口,通常是[[UIApplication sharedApplication] keyWindow]
  • 不是navigationBar的窗口navigationBar.window吗?
  • 是的,如果导航栏已经添加到窗口中,您可以使用它
【解决方案2】:

你可以这样做

  1. 默认将视图控制器的完整视图向下移动到 20px 降低的位置,与状态栏的高度相匹配(即,无论状态栏是否显示,它都将保持不变)。为此,您可以更改框架的 y 位置和高度。
  2. 通过将 UIWindow.backgroundColor 更改为您喜欢的任何颜色(正常情况下为白色)来修复您现在在顶部最可能不需要的黑条。

在无数次尝试修复在视图控制器之间切换时出现的卡顿问题(其中一个显示状态栏而另一个不显示状态栏)时,我刚刚实施了这个解决方案。这是我找到的最佳解决方案。

我做了 1. 在 UINavigationController 的子类中。我认为这是您在浏览导航控制器子视图控制器时保持一致的最佳选择。不过我没有测试其他选项(直接放在子 VC 中)。

为什么这行得通,为什么这是最好的方法:

导航栏实际上总是 44 点高(正如评论者已经提到的那样),但 20 点的状态栏将其向下推。将相同数量 (20) 的整个视图向下推,确保最一致的行为。每当您尝试直接操作 UINavigationBar 时,iOS 都会竭尽全力扭转这种变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多