diff --git a/core-render-ios/Extension/Category/KRConvertUtil.m b/core-render-ios/Extension/Category/KRConvertUtil.m index 98fbfa2f6..a3fc7eef2 100644 --- a/core-render-ios/Extension/Category/KRConvertUtil.m +++ b/core-render-ios/Extension/Category/KRConvertUtil.m @@ -643,7 +643,7 @@ + (UIEdgeInsets)currentSafeAreaInsets { } if (@available(iOS 11, *)) { - UIWindow *window = UIApplication.sharedApplication.windows.firstObject; + UIWindow *window = UIApplication.sharedApplication.keyWindow; return window.safeAreaInsets; } else { // 在 iOS 11 之前的版本中,您需要根据需要自己计算安全边距 diff --git a/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.h b/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.h index fae710bb1..11bea38b2 100644 --- a/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.h +++ b/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.h @@ -193,6 +193,12 @@ UIKIT_EXTERN NSString *const KRPageDataSnapshotKey; */ - (NSString * _Nullable)turboDisplayKey; +/* + * @brief 获取业务承载KuiklyRenderViewController的window + * @return 业务承载KuiklyRenderViewController的window + */ +- (UIWindow * _Nullable)targetWindow; + @end diff --git a/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.m b/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.m index be583c302..80f4e7942 100644 --- a/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.m +++ b/core-render-ios/Extension/KuiklyRenderViewControllerBaseDelegator.m @@ -343,6 +343,13 @@ - (NSString *)turboDisplayKey { return nil; } +- (UIWindow *)targetWindow { + if ([self.delegate respondsToSelector:@selector(targetWindow)]) { + return [self.delegate targetWindow]; + } + return nil; +} + #pragma mark - exception handle - (void)setExceptionBlock:(KuiklyRenderView *)view { diff --git a/core-render-ios/View/KuiklyRenderView.h b/core-render-ios/View/KuiklyRenderView.h index c8c54800d..4254de5d3 100644 --- a/core-render-ios/View/KuiklyRenderView.h +++ b/core-render-ios/View/KuiklyRenderView.h @@ -142,6 +142,13 @@ UIKIT_EXTERN NSString *const KRRootViewSizeDidChangedEventKey; */ - (NSString * _Nullable)turboDisplayKey; + +/* + * @brief 获取业务承载KuiklyRenderViewController的window + * @return 业务承载KuiklyRenderViewController的window + */ +- (UIWindow * _Nullable)targetWindow; + @end NS_ASSUME_NONNULL_END diff --git a/core-render-ios/View/KuiklyRenderView.m b/core-render-ios/View/KuiklyRenderView.m index f6acedc47..2a7252271 100644 --- a/core-render-ios/View/KuiklyRenderView.m +++ b/core-render-ios/View/KuiklyRenderView.m @@ -203,6 +203,13 @@ - (NSString *)turboDisplayKey { return nil; } +- (UIWindow *)targetWindow { + if ([self.delegate respondsToSelector:@selector(targetWindow)]) { + return [self.delegate targetWindow]; + } + return nil; +} + #pragma mark - private - (NSDictionary *)p_generateWithParams:(NSDictionary *)params size:(CGSize)size { @@ -219,8 +226,15 @@ - (NSDictionary *)p_generateWithParams:(NSDictionary *)params size:(CGSize)size mParmas[KRParamKey] = params? : @{}; mParmas[KRNativeBuild] = @(2); mParmas[KRAccessibilityRunning] = @(UIAccessibilityIsVoiceOverRunning() ? 1: 0); // 无障碍化是否开启 + if (@available(iOS 11.0, *)) { - mParmas[KRSafeAreaInsets] = [KRConvertUtil stringWithInsets:[KRConvertUtil currentSafeAreaInsets]]; + UIWindow *targetWindow = [self.delegate targetWindow]; + if (targetWindow) { + // 业务自行传递来了Kuikly页面所设置在的目标window,则直接返回此window的安全区域值 + mParmas[KRSafeAreaInsets] = [KRConvertUtil stringWithInsets:targetWindow.safeAreaInsets]; + } else { + mParmas[KRSafeAreaInsets] = [KRConvertUtil stringWithInsets:[KRConvertUtil currentSafeAreaInsets]]; + } } else { mParmas[KRSafeAreaInsets] = [KRConvertUtil stringWithInsets:UIEdgeInsetsMake([KRConvertUtil statusBarHeight], 0, 0, 0)]; // Fallback on earlier versions diff --git a/iosApp/iosApp/KuiklyRenderExpand/Controller/KuiklyRenderViewController.m b/iosApp/iosApp/KuiklyRenderExpand/Controller/KuiklyRenderViewController.m index 637886de0..929d89176 100644 --- a/iosApp/iosApp/KuiklyRenderExpand/Controller/KuiklyRenderViewController.m +++ b/iosApp/iosApp/KuiklyRenderExpand/Controller/KuiklyRenderViewController.m @@ -247,5 +247,9 @@ - (NSString *)turboDisplayKey { return _pageName; } +- (UIWindow *)targetWindow { + return UIApplication.sharedApplication.keyWindow; +} + @end