首先 - 这不是关于导航栏重叠状态栏的问题(和许多其他人一样)。 UINavigationBar(我的导航控制器)根据需要完全对齐。
问题出在我的导航栏自定义背景上 背景图像(或导航栏本身)随机停止在状态栏下(在我的应用程序启动后几秒钟或当我在其上出现/关闭模态导航控制器时)。 我的自定义图片具有适合iOS的尺寸(640x128像素)。
1。初始外观(所需 - 自定义640x128px背景在状态栏下很好地扩展):
2。过了一会儿(单独闪烁):
什么可能导致UINavigationBar背景图像的这种随机闪烁?
我使用以下代码来配置我的背景:
// Load resources for iOS 7 or later
[[CustomNavigationBar appearance] setBackgroundImage:[self imageNamed:@"bg_top_ios7.png"] forBarMetrics:UIBarMetricsDefault];
[[CustomNavigationBar appearance] setBackgroundImage:[self imageNamed:@"bg_top_ios7.png"] forBarMetrics:UIBarMetricsDefaultPrompt];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
Info.plist文件中的状态栏设置:
我在UIViewController子类init方法中也有以下设置(不确定是否重要):
-(id)init{
//DLog(@"BaseViewController init...");
if (self = [super init]) {
popToRoot = modal = NO;
rootIndex = 0;
indexInBottomNavigation = 0;
[Crashlytics setObjectValue:@"init" forKey:NSStringFromClass([self class])];
// iOS 7 adoptions:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
if ([self respondsToSelector:@selector(extendedLayoutIncludesOpaqueBars)])
self.extendedLayoutIncludesOpaqueBars = YES;
if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)])
self.automaticallyAdjustsScrollViewInsets = NO;
}
return self;
}
我的视图控制器嵌入在UINavigationController中(它负责UINavigatioBbar定位)。 我也使用ECSlidingViewController(揭示容器)作为我的导航控制器的容器,但我不确定它是否重要。
答案 0 :(得分:12)
事实证明我正在更改导航控制器导航栏的clipsToBounds = YES
(应用程序中的某个位置):
navigationController.navigationBar.clipsToBounds = YES;
为了让UINavigationBar
在状态栏下扩展其背景
其clipsToBounds必须设置为NO (这是默认设置)。
确保你不要嘲笑它。
解决方案简单如下:
navigationController.navigationBar.clipsToBounds = NO;