当前位置: 首页 > 知识库问答 >
问题:

IOS7中的UINavigationBar/状态栏问题

秦经义
2023-03-14

(如果需要的话,请查看其他编辑,而不是有一个过长的问题,需要编辑才能进行最终编辑以进行澄清)。

我有一个应用程序,其设置如下:

初始化视图控制器(ECSlidingViewController的子类)

主导航控制器(UINavigationController的子类)

主主主视图控制器(UIViewController的子类

在初始视图控制器的viewdiload中,我加载主导航控制器,主视图控制器作为其根。

self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainNavVC"];

这就是想要的效果。

然而,我然后加载一个模态视图控制器并关闭它,使用标准方法:

[self performSegueWithIdentifier:@"LoadSelectOpponentVC" sender:self];

然后以以下方式结束:

[self dismissViewControllerAnimated:YES completion:nil];

这进而导致主导航控制器(握住主视图控制器)错误地显示状态栏并重叠:

  1. plist设置设置为是-查看基于控制器的状态栏外观
  2. 我已尝试将edgesForExtendedLayout设置为相关的none,但没有更改

我已尝试注销一些帧以查看问题发生的位置:

首次加载时:

主导航VC-查看帧-{{0,0},{320,480}}

Main Nav VC - Nav Bar Frame - {{0, 0}, {320, 44}}

Initial VC - View Frame - {{0, 0}, {320, 480}}

Home VC - View Frame - {{0, 0}, {320, 480}} -- viewDidLoad Home VC

Home VC - View Frame - {{0, 64}, {320, 416}} -- viewWillAppear Home VC

--- After Modal is opened/closed ----

Home VC - View Frame - {{0, 64}, {320, 416}} -- viewWillAppear Home VC

Main Nav VC - View Frame - {{0, 0}, {320, 480}} -- viewWillAppear Main Nav

Main Nav VC - Nav Bar Frame - {{0, 20}, {320, 44}} -- viewWillAppear Main Nav

Home VC - View Frame - {{0, 44}, {320, 436}} -- viewDidAppear Home VC

共有3个答案

范甫
2023-03-14

我很惊讶还没有人找到正确的答案。UIBarPositiongDelegate工作起来很有魅力!只需将视图控制器设置为UIBarPositiongDelegate,并将其指定为该栏的代理即可。将该条放置在距离视图顶部20像素的位置。然后将此方法添加到视图控制器(仅在iOS7中可用):

- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar 
{ 
   return UIBarPositionTopAttached; 
}
年凯康
2023-03-14

在iOS7.0UIViewController默认以这种方式工作。如果您在UINavigationController中使用UIViewController,视图将是全屏的,并且导航栏是可见的。

如果导航栏可见,请执行以下操作==

self.edgesForExtendedLayout = UIRectEdgeNone

如果导航栏被隐藏,请执行以下操作。==

通过移动20个点来调整所有ui视图元素

如果使用Interface builder,则可以使用iOS6/7增量:首先,“以iOS 6.0的形式查看”,然后将增量设置为“20”,以实现iOS 7中的20偏移

孔运珧
2023-03-14

您是否尝试过苹果关于“防止状态栏覆盖您的视图”的建议:https://developer.apple.com/library/content/qa/qa1797/_index.html

您是否看过“UIBarPositiongDelegate”:https://developer.apple.com/documentation/uikit/uibarpositioningdelegate

 类似资料:
  • 我正在将我的应用程序迁移到iOS 7。为了处理状态栏问题,我添加了以下代码 这在正常情况下工作正常。如果我正在更改方向(应用程序仅支持横向方向)或显示任何视图控制器并取消模型视图控制器,则我的视图控制器对齐方式将更改。状态栏再次与我的视图控制器重叠。这段代码根本不起作用。请指导我解决此状态栏问题。 案例2:这就是我展示视图控制器的方式 裁判: 提前谢谢。

  • 我正在构建一个iOS网络应用程序。自从升级到iOS 7后,我注意到状态栏有很多问题。我想让状态栏显示为带黑色文本/图标的白色,但我似乎无法理解。 我尝试过的meta标签有: 只显示一个空的黑条,并向下移动内容: 显示带有白色文本/图标的黑色条: 显示带有白色文本/图标的白色条: 关于我做错了什么,或者如何让状态栏显示为带黑色文本的白色背景,有什么想法吗?

  • 我最近升级到xcode 5,当我在iOS模拟器中运行我的应用程序时,启动屏幕与状态栏重叠,当你在应用程序中时,状态栏与我应用程序上的元素重叠,就像我在应用程序左上角的后退按钮一样。我使用phonegap 2.9构建我的应用程序。你知道我怎样才能正确地渲染它吗。

  • 我刚刚将iPhone5iOS7升级到四个测试版。现在,当我在iPhone上从Xcode 5运行我的应用程序时,状态栏不会隐藏,即使它应该隐藏。 不工作: 不工作: 无法登录到Apple开发者论坛

  • 我当前的应用程序运行在iOS 4.2、5和6上。 导航栏为橙色,状态栏为黑色背景色。然而,当我在iOS 7上运行相同的应用程序时,我观察到状态栏看起来是透明的,与导航栏的背景颜色相同。 因此,我无法区分状态栏和导航栏。如何使状态栏与iOS 5和iOS 6中的状态栏相同,即黑色背景色和白色文本色?我如何通过编程实现这一点? 我在谷歌上搜索了一下,发现一个建议,我必须添加一个黑色背景,大约20像素高的

  • 我正在为iOS 7更新我的应用程序,我正在调整我的所有视图,以适应新的透明状态栏(我的应用程序仍将使用不透明的导航栏)。 在每个视图中调整状态栏都相对容易,除了我的一个视图控制器中的UISearchBar连接到UISearchDisplayController时遇到的一个主要问题。 搜索栏似乎显示正常,如下所示: 问题是,一旦我开始搜索,导航栏就会消失(应该如此),但其他所有内容也会向上移动以重叠