我已按照以下教程将我的导航栏向下移动,因此xcode 5 / ios7中的状态栏不会覆盖它:
Status bar and navigation bar issue in IOS7
但是现在在iOS7中,状态栏顶部会有一个空白区域,我希望导航栏也可以填充这个区域
例如,Facebook / twittter / Instagram iOS7应用程序也具有状态栏后面的导航栏背景。我如何实现这一目标?
对不起,如果我不清楚,但真的很想得到这个分类
谢谢!
答案 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添加用户定义的运行时属性:
答案 1 :(得分:0)
如果您想在iOS 7中使用UIStatusBar后面的自定义背景图像拉伸UINavigationBar,请考虑以下事项:
在代码中(仅限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];