首先 - 这不是关于导航栏重叠状态栏的问题(与许多其他问题一样)。
UINavigationBar(我的导航控制器)完全按照我的要求对齐。
问题出在我的导航栏自定义背景上。
背景图像(或导航栏本身)在状态栏下随机停止扩展(在我的应用程序启动几秒钟后或当我在其上呈现/关闭模态导航控制器时)。
我的自定义图像具有适合 iOS 的尺寸(640x128px)。
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 (显示容器)作为导航控制器的容器,但我不确定这是否重要。
原来我正在改变clipsToBounds = YES
导航控制器的导航栏(应用程序中的某个位置):
navigationController.navigationBar.clipsToBounds = YES;
为了UINavigationBar
在状态栏下扩展其背景其 ClipsToBounds 必须设置为 NO(这是默认值)。
确保你没有用它来嘲笑。
解决方案简单如下:
navigationController.navigationBar.clipsToBounds = NO;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)