diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.mm b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.mm index 34c3b8f0e..2ef733b97 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.mm +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.mm @@ -371,6 +371,10 @@ }); } +- (void)invalidateRootNode { + [self invalidateNode:_rootNode]; +} + - (void)_reportInvalidatedObjects { NSMutableArray* nodes = [NSMutableArray new]; { // scope mutex acquisition diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/SKInvalidation.h b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/SKInvalidation.h index 9b26d599e..f2eee5819 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/SKInvalidation.h +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/SKInvalidation.h @@ -10,7 +10,7 @@ @protocol SKInvalidationDelegate - (void)invalidateNode:(id)node; - +- (void)invalidateRootNode; - (void)updateNodeReference:(id)node; @end diff --git a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/UIView+SKInvalidation.mm b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/UIView+SKInvalidation.mm index 3da4f961b..10058261c 100644 --- a/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/UIView+SKInvalidation.mm +++ b/iOS/Plugins/FlipperKitLayoutPlugin/FlipperKitLayoutPlugin/UIView+SKInvalidation.mm @@ -9,7 +9,6 @@ #import #import - #import "SKInvalidation.h" #import "SKSwizzle.h" #import "UIView+SKInvalidation.h" @@ -31,6 +30,14 @@ FB_LINKABLE(UIView_SKInvalidation) }); } +/** +This function takes in a view and returns true if the view is a UIWindow and its +windowLevel is an alert one otherwise it returns false. +*/ +static auto shouldInvalidateRootNode(UIView* view) -> bool { + return [view isKindOfClass:[UIWindow class]]; +} + - (void)swizzle_setHidden:(BOOL)hidden { [self swizzle_setHidden:hidden]; @@ -47,7 +54,11 @@ FB_LINKABLE(UIView_SKInvalidation) id delegate = [SKInvalidation sharedInstance].delegate; if (delegate != nil) { - [delegate invalidateNode:view]; + if (shouldInvalidateRootNode(view.superview)) { + [delegate invalidateRootNode]; + return; + } + [delegate invalidateNode:view.superview]; } } @@ -55,6 +66,10 @@ FB_LINKABLE(UIView_SKInvalidation) id delegate = [SKInvalidation sharedInstance].delegate; if (delegate != nil && self.superview != nil) { + if (shouldInvalidateRootNode(self.superview)) { + [delegate invalidateRootNode]; + return; + } [delegate invalidateNode:self.superview]; }