2

我有一个仅支持 ios7+ 的应用程序 导航栏设置使用状态栏下方显示的新 64 像素高栏。这是应用程序启动时的样子:

在此处输入图像描述

如果我执行任何类型的“presentViewController”,当我关闭视图时,导航栏会移回 44px 高度,并且仍然出现在状态栏下方,这反过来又会使视图的所有内容也向上移动。看起来是这样的:

在此处输入图像描述

不管我是呈现我自己的视图还是只是呈现 UIImagePickerView,任何通过导航控制器的向上滑动模式都会破坏导航栏设置。有想法该怎么解决这个吗?

几点注意事项:

  • 在 plist 中:“查看基于控制器的状态栏外观”设置为“否”
  • 导航栏配置为 self.navController.navigationBar.translucent = NO;
  • 我正在使用 .xib 而不是故事板

更新:

我在 PKRevealController ( https://github.com/pkluz/PKRevealController ) 中有导航控制器。取出显示控制器并将导航控制器添加到窗口本身就可以解决问题......为什么显示控制器会导致它的行为不同?

解决方案:

原来是 PKRevealController 库导致了这个问题。我重新设计了它在 AppDelegate 中的设置方式并解决了问题,尽管它有点“hacky”。我将我的“之前”和“之后”配置放在下面:

初始设置是:

  1. 配置 PKRevealController
  2. 配置 NavController 并添加 rootView
  3. 设置 pkreveal 前视图 = navController
  4. 将显示控制器添加到窗口作为 Windows 根视图

解决方法是

  1. 创建一个包含 NavController
  2. 执行上述步骤 1-3
  3. 将 pkrevealcontroller 添加到包含的 navController
  4. 将包含导航控制器导航栏的设置为隐藏
  5. 将包含导航控制器添加到窗口作为根视图
4

2 回答 2

3

如果它的导航控制器比您可以在每个视图控制器的 viewdidload 中使用它:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
} 
于 2013-10-20T21:02:21.377 回答
0

我遇到了同样的问题,但只需将 UINavigationBar Y 位置设置为 20px 而不是 0px 即可轻松解决。然后你必须将 UINavigationBarDelegate 分配给你的 ViewController:

[_navigationBar setDelegate:self];

此外,您必须将此方法添加到您的 ViewController,由于委托分配,该方法将被调用:

-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}
于 2013-10-11T22:14:17.490 回答