From 41aec6b89efbe0d6a0983cc26fee49ab9335baca Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Thu, 6 Nov 2025 15:16:03 +0800 Subject: [PATCH] 4 --- Shared/KBConfig.h | 1 + keyBoard/Class/Home/VC/HomeVC.m | 9 ++++++--- keyBoard/Class/Shared/KBConfig.h | 28 ++++++++++++++++++++++++++++ keyBoard/KeyBoardPrefixHeader.pch | 30 ++++++++++++++++++++++++++++++ keyBoard/Shared/KBConfig.h | 28 ++++++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 3 deletions(-) diff --git a/Shared/KBConfig.h b/Shared/KBConfig.h index e525573..35a90bb 100644 --- a/Shared/KBConfig.h +++ b/Shared/KBConfig.h @@ -76,3 +76,4 @@ static inline CGFloat KBFit(CGFloat designValue) { #ifndef KBWeakSelf #define KBWeakSelf __weak __typeof(self) weakSelf = self; #endif + diff --git a/keyBoard/Class/Home/VC/HomeVC.m b/keyBoard/Class/Home/VC/HomeVC.m index 4d0530c..c51503d 100644 --- a/keyBoard/Class/Home/VC/HomeVC.m +++ b/keyBoard/Class/Home/VC/HomeVC.m @@ -25,10 +25,13 @@ [self setupMas:topV]; // 创建sheetVC HomeSheetVC *vc = [[HomeSheetVC alloc] init]; - if (<#condition#>) { - <#statements#> + // 使用宏,避免误写成函数指针判断导致恒为 true + if (KB_DEVICE_HAS_NOTCH) { + vc.minHeight = KB_SCREEN_HEIGHT - topV - 34; + }else{ + vc.minHeight = KB_SCREEN_HEIGHT - topV; + } - vc.minHeight = KB_SCREEN_HEIGHT - topV; vc.topInset = 100; [self presentPanModal:vc]; } diff --git a/keyBoard/Class/Shared/KBConfig.h b/keyBoard/Class/Shared/KBConfig.h index b9cc820..88ccf09 100644 --- a/keyBoard/Class/Shared/KBConfig.h +++ b/keyBoard/Class/Shared/KBConfig.h @@ -31,3 +31,31 @@ #ifndef KB_KEYCHAIN_ACCESS_GROUP #define KB_KEYCHAIN_ACCESS_GROUP @"TN6HHV45BB.com.loveKey.nyx.shared" #endif + +// --- 设备特性:是否为带刘海机型(iPhone X 及以后异形屏)--- +// 说明:在 iPhone 12 等机型底部会有 34px 安全区,这里通过安全区来判断是否为“刘海屏”。 +// 注意:使用到 UIKit,这里自行引入,避免依赖 PCH 的包含顺序。 +#import +static inline BOOL KBDeviceHasNotchRuntime(void) { + if (@available(iOS 11.0, *)) { + UIWindow *window = nil; + if (@available(iOS 13.0, *)) { + for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *ws = (UIWindowScene *)scene; + for (UIWindow *w in ws.windows) { if (w.isKeyWindow) { window = w; break; } } + if (window) { break; } + } + } + if (!window) { window = UIApplication.sharedApplication.windows.firstObject; } + } else { + window = UIApplication.sharedApplication.keyWindow; + } + return window.safeAreaInsets.bottom > 0.0; + } + return NO; +} + +#ifndef KB_DEVICE_HAS_NOTCH +#define KB_DEVICE_HAS_NOTCH (KBDeviceHasNotchRuntime()) +#endif diff --git a/keyBoard/KeyBoardPrefixHeader.pch b/keyBoard/KeyBoardPrefixHeader.pch index f229331..3a9d4b2 100644 --- a/keyBoard/KeyBoardPrefixHeader.pch +++ b/keyBoard/KeyBoardPrefixHeader.pch @@ -99,4 +99,34 @@ static inline CGFloat KB_StatusBarHeight(void) { #define KB_IS_IPHONEX_SERIES (KB_SafeAreaBottom() > 0.0) + + +// --- 设备特性:是否为带刘海机型(iPhone X 及以后异形屏)--- +// 说明:在 iPhone 12 等机型底部会有 34px 安全区,这里通过安全区来判断是否为“刘海屏”。 +// 注意:使用到 UIKit,这里自行引入,避免依赖 PCH 的包含顺序。 +#import +static inline BOOL KBDeviceHasNotchRuntime(void) { + if (@available(iOS 11.0, *)) { + UIWindow *window = nil; + if (@available(iOS 13.0, *)) { + for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *ws = (UIWindowScene *)scene; + for (UIWindow *w in ws.windows) { if (w.isKeyWindow) { window = w; break; } } + if (window) { break; } + } + } + if (!window) { window = UIApplication.sharedApplication.windows.firstObject; } + } else { + window = UIApplication.sharedApplication.keyWindow; + } + return window.safeAreaInsets.bottom > 0.0; + } + return NO; +} + +#ifndef KB_DEVICE_HAS_NOTCH +#define KB_DEVICE_HAS_NOTCH (KBDeviceHasNotchRuntime()) +#endif + #endif /* KeyBoardPrefixHeader_pch */ diff --git a/keyBoard/Shared/KBConfig.h b/keyBoard/Shared/KBConfig.h index b9cc820..88ccf09 100644 --- a/keyBoard/Shared/KBConfig.h +++ b/keyBoard/Shared/KBConfig.h @@ -31,3 +31,31 @@ #ifndef KB_KEYCHAIN_ACCESS_GROUP #define KB_KEYCHAIN_ACCESS_GROUP @"TN6HHV45BB.com.loveKey.nyx.shared" #endif + +// --- 设备特性:是否为带刘海机型(iPhone X 及以后异形屏)--- +// 说明:在 iPhone 12 等机型底部会有 34px 安全区,这里通过安全区来判断是否为“刘海屏”。 +// 注意:使用到 UIKit,这里自行引入,避免依赖 PCH 的包含顺序。 +#import +static inline BOOL KBDeviceHasNotchRuntime(void) { + if (@available(iOS 11.0, *)) { + UIWindow *window = nil; + if (@available(iOS 13.0, *)) { + for (UIScene *scene in UIApplication.sharedApplication.connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) { + UIWindowScene *ws = (UIWindowScene *)scene; + for (UIWindow *w in ws.windows) { if (w.isKeyWindow) { window = w; break; } } + if (window) { break; } + } + } + if (!window) { window = UIApplication.sharedApplication.windows.firstObject; } + } else { + window = UIApplication.sharedApplication.keyWindow; + } + return window.safeAreaInsets.bottom > 0.0; + } + return NO; +} + +#ifndef KB_DEVICE_HAS_NOTCH +#define KB_DEVICE_HAS_NOTCH (KBDeviceHasNotchRuntime()) +#endif