7

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

IOS7中的状态栏和导航栏问题

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

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

对不起,如果我不清楚,但真的很想把这个排序

谢谢!

4

2 回答 2

25

您确实想设置barPosition.UINavigationBar

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

让你的 ViewController 符合协议UINavigationBarDelegate并实现 positionBar:metod。(您真正需要的协议是UIBarPositioningDelegateUINavigationBarDelegate确实对其进行了扩展。)

@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 中UINavigationBar,添加一个用户定义的运行时属性,其中 KeyPath = barPosition、Type = Number 和 Value = 3:

添加用户定义的运行时属性

于 2015-02-05T14:50:54.970 回答
0

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

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

在代码中(仅限 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];
于 2013-09-28T11:12:08.030 回答