ios7 presentViewController将navBar从新的64px栏恢复为旧的44px版本

时间:2013-10-11 15:37:36

标签: objective-c ios7 statusbar navbar

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

enter image description here

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

enter image description here

如果我呈现我自己的一个视图或者我只是呈现UIImagePickerView并不重要,通过导航控制器的任何类型的向上滑动模式都会破坏导航栏设置。关于如何解决这个问题的任何想法?

一些注意事项:

    plist中的
  • :“查看基于控制器的状态栏外观”设置为“NO”
  • navbar配置为self.navController.navigationBar.translucent = NO;
  • 我正在使用.xib NOT Storyboards

更新:

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

解决方案:

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

初始设置为:

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

    1. 创建一个包含NavController
    2. 做上面的行为1-3
    3. 将pkrevealcontroller添加到包含navController
    4. 将包含导航控制器导航栏设置为隐藏
    5. 以root视图添加包含导航控制器到窗口

2 个答案:

答案 0 :(得分:3)

如果它的navigationcontroller比你可以在每个viewcontroller的viewdidload中使用它:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
} 

答案 1 :(得分:0)

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

[_navigationBar setDelegate:self];

此外,您必须将此方法添加到ViewController中,因为委托分配将调用该方法:

-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}