在我的应用程序中,我通过简单地缩放整个窗口以适应剩余的屏幕空间来处理状态栏框架的变化:
- (void)application:(UIApplication *)application willChangeStatusBarFrame:
(CGRect)newStatusBarFrame {
UIView* window = [UIApplication sharedApplication].keyWindow;
[UIView animateWithDuration:1 / 3.f animations:^{
CGFloat heightDifference = newStatusBarFrame.size.height -
kWXDefaultStatusBarHeight;
[window setTransform:CGAffineTransformMakeScale(1.f,
heightScaleForCallStatusBar())];
[window setFrame:CGRectOffset(window.frame, 0, heightDifference -
kWXDefaultStatusBarHeight / 2)];
}];
}
这可行,但如果窗口在调用期间按比例缩小,并且我提供了一个带有 的视图控制器-presentViewController:animated:completion:
,则新控制器不使用按比例缩放的坐标系,它使用未按比例缩放的坐标系,并且 UI 会损坏。知道如何让窗口.transform
转移到呈现的新视图控制器吗?
或者,是否有另一种方法来处理通话状态栏而不重新排列我的所有 UI 元素?