-3

我对导航栏进行了更改,这意味着我增加了导航栏的高度并进行了一些自定义更改,它工作正常,但是当我最小化应用程序并再次最大化它时,它只显示我所做的更改的原始高度,那些没有最小化后工作,我的代码是

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSLog(@" i m in didFinishLaunchingWithOptions" );



    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"TopHeader"] forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setFrame:CGRectMake(0, 0, 320, 55)];   

    [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:(-15.0) forBarMetrics:UIBarMetricsDefault];

    [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
                                                           [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8],UITextAttributeTextShadowColor,
                                                           [NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
                                                           UITextAttributeTextShadowOffset,
                                                           [UIFont fontWithName:@"HelveticaNeue-CondensedBlack" size:16.0], UITextAttributeFont, nil]];

return YES;  
}

最大化之后,applicationDidBecomeActive这就是为什么我将上面的代码放入applicationDidBecomeActive但它不起作用,为什么会这样?

在此处输入图像描述
再次最小化和最大化之后最小化之前,它看起来像下面,即高度再次自动设置为 44。
在此处输入图像描述

更新:我写了以下代码 applicationWillEnterForeground

- (void)applicationWillEnterForeground:(UIApplication *)application
{    
    UINavigationController *my=(UINavigationController *  )self.window.rootViewController;

    UINavigationBar *navigationBar = [my navigationBar];
    CGRect frame = [navigationBar frame];
    frame.size.height = 55.0f;
    [navigationBar setFrame:frame];

    NSLog(@" i m in applicationWillEnterForeground" );

   }

在调试时,当我写它的描述时,它显示高度是 55。但在屏幕上它看起来仍然像第二张图像。为什么会这样。

4

2 回答 2

4

当您的应用程序从后台打开时application:didFinishLaunchingWithOptions:不会被调用。您想使用applicationWillEnterForeground:applicationDidBecomeActive:代替。查看UIApplicationDelegate 协议参考以获取更多信息。


编辑:针对问题作者的编辑,我会这样说。我在我的应用程序中玩过这段代码,我已经能够重现这个问题。我尝试了许多解决方案来修复它,包括在UINavigationController's中重置导航栏的框架layoutSubviews。我建议创建一个重现此问题的示例项目并将其提交给 Apple 的 Bug 报告器,或者创建一个 UINavigationBar 子类来重新定位和调整自身大小。

于 2013-01-15T05:03:24.383 回答
1

我解决了这个问题,只是覆盖了 UINavigationBar & 在 LayoutSubViews 中设置了导航栏的高度。

@implementation UINavigationBar (customNAvigBar)

- (void)layoutSubviews
{
    [self setFrame:CGRectMake(0, 0, 320, 55)];
}

@end

这意味着每当我绘制导航栏时,它会自动调用并设置高度。

于 2013-01-16T11:18:46.143 回答