一段时间后,ios7 UINavigationBar 在状态栏下停止扩展

Posted

技术标签:

【中文标题】一段时间后,ios7 UINavigationBar 在状态栏下停止扩展【英文标题】:ios7 UINavigationBar stops extending under status bar after a while 【发布时间】:2014-01-26 07:54:59 【问题描述】:

首先 - 这不是关于导航栏重叠状态栏的问题(与许多其他问题一样)。 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(显示容器)作为我的导航控制器的容器,但我不确定它是否重要。

【问题讨论】:

【参考方案1】:

原来我正在更改导航控制器导航栏的clipsToBounds = YES(在应用程序的某个位置):

navigationController.navigationBar.clipsToBounds = YES;

为了让UINavigationBar在状态栏下扩展它的背景 它的 clipsToBounds 必须设置为 NO(这是默认设置)。 确保你不要拿它开玩笑。

解决方法简单如下:

navigationController.navigationBar.clipsToBounds = NO;

【讨论】:

以上是关于一段时间后,ios7 UINavigationBar 在状态栏下停止扩展的主要内容,如果未能解决你的问题,请参考以下文章

为IOS7布置一段可变长度的文本最简洁和语义化的方式是啥?

iOS7 CLLocationManager 暂停更新并且不会恢复

iOS 7 解析地理定位

我可以为以前不支持的 iOS 版本发布更新吗?

iOS7 UIModalTransitionStyleFlipHorizo​​ntal 过渡后反弹

ios7取消3次后无法登录gamecenter增益[重复]