隐藏/显示statusBar导致页面offset的问题

今天在自己的应用中发现了一个问题。
实现场景:

1,当前页面中隐藏了系统的statusBar,比如在阅读页面就需要全界面形式的阅读体验

[[UIApplication sharedApplication] setStatusBarHidden:YES];

2,按住home键退出应用,应用挂起在后台

3,接收到推送提醒,点击推送提醒,唤起应用

4,应用里显示推送消息是在statusBar上显示的,所以把隐藏的statusBar先设置成不隐藏

[[UIApplication sharedApplication] setStatusBarHidden:NO];

5,然后自己实现具体的显示效果

在第四步中就出现了问题,当应用从后台唤醒的时候如果把原来隐藏着的statusBar设置成不隐藏,会导致当前页面的bounds大小产生变化,会发生视图向下移的情况,就是statusBar把当前视图给顶下去了。

起初想出来的解决方法是寻找视图大小改变时的切入点,把试图大小修正过来,但是一直没有成功。

但是有一个情况一直没有太注意,就是应用没有退到后台,而处于正在用的状态的时候如果设置statusBar显示出来就跟预想到的一样,会在当前视图上面以浮层的方式显示出来,也就是不会导致当前视图产生位移。

最后解决方案同样是从这里入手,应用从后台唤醒的时候先不设置statusBar的状态,而是延后设置,这样就不会导致statusBar的状态变化跟当前视图的显示同时进行,避免当前视图产生位移,如下代码:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    NSDictionary *apsdic = [userInfo objectForKey:@"aps"];
    NSString *alertStr = [apsdic objectForKey:@"alert"];
    [self performSelector:@selector(showRemoteNotification:) withObject:alertStr afterDelay:1.0f];
}
              
- (void)showRemoteNotification:(NSString*)alertStr
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    self.statusBar = [[CustomStatusBar alloc] init];
    [statusBar showStatusMessage:alertStr];
    [statusBar hide:YESafterDelay:4.0f];
}

 

结论:这个问题按最后解决的方法来看是一个非常容易解决的问题,只不过误入歧途,耗了大半天,饶了一大圈才找到正确的解决方法。有时候问题想的过于复杂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值