CGFloat YBIBSafeAreaBottomHeight(void) {
CGFloat bottom = 0;
if (@available(iOS 11.0, *)) {
UIWindow *keyWindow = nil;
// 优先从 connectedScenes 获取 keyWindow(iOS 13+)
if (@available(iOS 13.0, *)) {
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:UIWindowScene.class]) {
UIWindowScene *windowScene = (UIWindowScene *)scene;
for (UIWindow *window in windowScene.windows) {
if (window.isKeyWindow) {
keyWindow = window;
break;
}
}
if (keyWindow) break;
}
}
} else {
// iOS 11 ~ 12 使用 keyWindow
keyWindow = UIApplication.sharedApplication.keyWindow;
}
bottom = keyWindow.safeAreaInsets.bottom;
}
return bottom;
}
CGFloat YBIBStatusbarHeight(void) {
CGFloat height = UIApplication.sharedApplication.statusBarFrame.size.height;
if (height <= 0) {
// iOS 11+ 尝试从 keyWindow 获取 safeAreaInsets.top
if (@available(iOS 11.0, *)) {
UIWindow *keyWindow = nil;
// 优先从 connectedScenes 获取 keyWindow(iOS 13+)
if (@available(iOS 13.0, *)) {
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:UIWindowScene.class]) {
UIWindowScene *windowScene = (UIWindowScene *)scene;
for (UIWindow *window in windowScene.windows) {
if (window.isKeyWindow) {
keyWindow = window;
break;
}
}
if (keyWindow) break;
}
}
} else {
// iOS 11 ~ 12 使用 keyWindow
keyWindow = UIApplication.sharedApplication.keyWindow;
}
height = keyWindow.safeAreaInsets.top;
}
}
// 最终 fallback
if (height <= 0) {
height = 20;
}
return height;
}
CGFloat YBIBSafeAreaBottomHeight(void) {
CGFloat bottom = 0;
if (@available(iOS 11.0, *)) {
UIWindow *keyWindow = nil;
// 优先从 connectedScenes 获取 keyWindow(iOS 13+)
if (@available(iOS 13.0, *)) {
for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) {
if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:UIWindowScene.class]) {
UIWindowScene *windowScene = (UIWindowScene *)scene;
for (UIWindow *window in windowScene.windows) {
if (window.isKeyWindow) {
keyWindow = window;
break;
}
}
if (keyWindow) break;
}
}
} else {
// iOS 11 ~ 12 使用 keyWindow
keyWindow = UIApplication.sharedApplication.keyWindow;
}
bottom = keyWindow.safeAreaInsets.bottom;
}
return bottom;
}
CGFloat YBIBStatusbarHeight(void) {
}