使导航栏在xCode 5 / iOS7中的状态栏后面伸展

时间:2013-09-27 22:28:49

标签: iphone objective-c xcode uiviewcontroller ios7

我已按照以下教程将我的导航栏向下移动,因此xcode 5 / ios7中的状态栏不会覆盖它:

Status bar and navigation bar issue in IOS7

但是现在在iOS7中,状态栏顶部会有一个空白区域,我希望导航栏也可以填充这个区域

例如,Facebook / twittter / Instagram iOS7应用程序也具有状态栏后面的导航栏背景。我如何实现这一目标?

对不起,如果我不清楚,但真的很想得到这个分类

谢谢!

2 个答案:

答案 0 :(得分:24)

您确实要设置barPosition的{​​{1}}。

您可以在代码中执行此操作:

让ViewController符合协议UINavigationBar并实现positionBar:metod。 (您真正需要的协议是UINavigationBarDelegate,但UIBarPositioningDelegate确实扩展了它。)

UINavigationBarDelegate
在故事板中

或:

@interface SampleViewController () <UINavigationBarDelegate> @property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar; @end @implementation SampleViewController - (void)viewDidLoad { [super viewDidLoad]; _navigationBar.delegate = self; } - (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar { return UIBarPositionTopAttached; } @end 的Identity Inspector中,使用KeyPath = barPosition,Type = Number和Value = 3添加用户定义的运行时属性:

Add User Defined Runtime Attribute

答案 1 :(得分:0)

如果您想在iOS 7中使用UIStatusBar后面的自定义背景图像拉伸UINavigationBar,请考虑以下事项:

  1. UIStatusBar原样是透明的。
  2. 将UINavigationBar的 barPosition 属性设置为 UIBarPositionTopAttached
  3. iOS 7中的UINavigationBar背景图像(如果UIBarPositionTopAttached)具有与iOS 7之前不同的尺寸,您必须使用它们:现在高度为64点
  4. 在代码中(仅限iPhone ):

    // Image needs 64 points height
    NSString* navBarPortraitBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarPortraitBackground" ofType:@"png"];
    NSString* navBarLandscapeBackgroundPath;
    
    
    if(UIScreen.mainScreen.bounds.size.height == 568){
    
        // Image needs 64 points height
        navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarWideLandscapeBackground" ofType:@"png"];
    
    } else {
    
        // Image needs 64 points height
        navBarLandscapeBackgroundPath = [[NSBundle mainBundle] pathForResource:@"navBarLandscapeBackground" ofType:@"png"];
    
    }
    
    
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarPortraitBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsDefault];   
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithContentsOfFile:navBarLandscapeBackgroundPath] forBarPosition:UIBarPositionTopAttached barMetrics:UIBarMetricsLandscapePhone];
    

    如果您只想更改为UINavigationBar的背景颜色,它将自动延伸到UIStatusBar后面。

    在代码中:

        [UINavigationBar appearance].barTintColor = [UIColor redColor];