【问题标题】:application life cycle issue应用生命周期问题
【发布时间】:2012-12-29 04:18:31
【问题描述】:

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

- (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。但在屏幕上它看起来仍然像第二张图像。为什么会这样。

【问题讨论】:

  • 反对者请发表评论?不必要地投票不是一件好事

标签: iphone ios uinavigationbar lifecycle


【解决方案1】:

当您的应用从后台打开时,application:didFinishLaunchingWithOptions: 不会被调用。您想改用applicationWillEnterForeground:applicationDidBecomeActive:。查看UIApplicationDelegateprotocol reference了解更多信息。


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

【讨论】:

  • 在没有调用方法的意义上不起作用,或者在导航栏高度错误的意义上不起作用?
  • 方法正在调用,我正在通过 NSLOg 检查,当它在应用程序中时高度正在工作:didFinishLaunchingWithOption
  • 不知道为什么这被否决了?无论如何,我已经能够在我一直在开发的应用程序中重现这种行为。初始应用程序启动后,我无法修改导航栏高度。这开始指向 Apple 错误。
【解决方案2】:

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

@implementation UINavigationBar (customNAvigBar)

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

@end

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多