从非活动状态返回时,uinavigationbar 向上移动

Posted

技术标签:

【中文标题】从非活动状态返回时,uinavigationbar 向上移动【英文标题】:uinavigationbar moves up when returning from inactive state 【发布时间】:2011-12-29 16:56:16 【问题描述】:

我在 uinavigationbar 上方有一个自定义图像标题。我用这段代码来做这个:

self.navController.view.frame = CGRectMake(0.0, 0.0, 320.0, 480.0); 
self.navController.navigationBar.frame = CGRectMake(0.0, 73.0, 320.0, 44.0);

UIView *checkNav = [self.navController.view viewWithTag:9999];
if (checkNav == nil) 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header-logo.jpg"]];
    imgView.tag = 9999;
    [imgView setFrame:CGRectMake(0.0, 23.0, 320.0, 50.0)];
    [self.navController.view addSubview:imgView];

这很好用。但是,当应用程序处于非活动状态(点击主 iphone 主页按钮)然后您返回应用程序时,uinavigationbar 会向上移动到屏幕顶部的默认位置并隐藏在我的自定义标题图像后面。

我尝试将代码放入 applicationDidBecomeActive,但没有帮助。任何帮助将不胜感激。

谢谢!

【问题讨论】:

请包含您“扔”到 applicationDidBecomeActive 中的代码。 【参考方案1】:

您确实会在docs 中收到关于此的警告:

除了少数例外,您永远不应该直接修改导航栏对象。允许修改导航栏的 barStyle 或 translucent 属性,但您绝不能直接更改其框架、边界或 alpha 值

话虽如此,假设您有一个指向导航控制器的指针,您应该能够通过在 applicationDidBecomeActive 或 applicationWillEnterForeground 中重复上述代码来获得效果。您可能会发现需要隐藏和重新显示导航栏(有点小技巧,但它可以提供帮助 - 我在隐藏/显示状态栏时遇到了类似的问题,并且导航栏没有转到正确的位置)

【讨论】:

啊!我在文档中错过了这一点……感谢您指出这一点。我不可能因为导航栏而拒绝该应用程序。所以,我将改变设计,把导航栏放回它应该去的地方。谢谢!【参考方案2】:

将代码放入 viewWillAppear 怎么样?

【讨论】:

这在它第一次“唤醒”时不起作用(只是再次尝试确保),但是一旦应用程序返回并且我导航到我使用 viewWillAppear 设置的视图。 ..它会自我纠正。只是没有加载。如果这是有道理的。 =) 有点难过,它必须是一个导航栏,你可以用工具栏代替吗?

以上是关于从非活动状态返回时,uinavigationbar 向上移动的主要内容,如果未能解决你的问题,请参考以下文章

GCM 使用 content_available 向 iOS 推送通知(无法从非活动状态调用)

EditText处于非活动状态时如何设置提示位置

隐藏 UIStatusBar / 移动 UINavigationBar

Activity生命周期理解

从非反应文件分派操作时 Redux 状态未更新

如何更改onclick功能按钮中的值