红色status bar造成UITabBar下移的问题

在开发应用时,遇到了拨打电话及录制视频后,发现red statusbar一闪而过但是整体页面下移的问题,在stackoverflow上寻求无果。
通过调试Debug View Hierarchy发现

红色status bar造成UITabBar下移的问题_第1张图片
Paste_Image.png

UIViewControllerWrapperView开始就有不同程度的下移,添加Observer之后发现:

2016-09-03 10:50:45.710 Cocoa[2471:1581789] CGRect–{{0, 0}, {320, 568}} 
2016-09-03 10:50:59.294 Cocoa[2471:1581789] CGRect–{{0, 0}, {320, 548}} 
2016-09-03 10:50:59.344 Cocoa[2471:1581789] CGRect–{{0, 20}, {320, 548}} 
2016-09-03 10:50:59.435 Cocoa[2471:1581789] CGRect–{{0, 20}, {320, 568}} 
2016-09-03 10:50:59.447 Cocoa[2471:1581789] CGRect–{{0, 0}, {320, 588}} 
2016-09-03 10:50:59.910 Cocoa[2471:1581789] CGRect–{{0, 0}, {320, 588}}

可见在red statusbar出现并消失这一过程中,多出了

2016-09-03 10:50:59.435 Cocoa[2471:1581789] CGRect–{{0, 20}, {320, 568}} 

这一过程,不知道是怎么来的

对比其他应用程序,录制视频是比较常见的功能,但很少遇到这种情况,其应用大都在录制之后进行了较长时间的视频处理过程,red statusbar不会出现,因此也可以参考这类设计。

目前采用了以下方法进行临时处理,计划进一步研究出下移过程的触发逻辑再进行系统的修改:

[self.window.rootViewController.view addObserver:self forKeyPath:kRootViewFrame options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
// 监视rootViewController上移
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
   if ([keyPath isEqualToString:forKeyPath:kRootViewFrame]) {
   CGRect convertRect = [self.window.rootViewController.view convertRect:self.window.rootViewController.view.frame toView:nil];
   if (lastRect.origin.y == kRedStatusBarHeight && convertRect.origin.y == 0) {
     dispatch_async(dispatch_get_main_queue(),^{
       self.window.rootViewController.view.frame = [UIScreen mainScreen].bounds;
     });
   }
   lastRect = convertRect;
   NSLog(@"CGRect--%@", NSStringFromCGRect(convertRect));
 }
}

你可能感兴趣的:(红色status bar造成UITabBar下移的问题)