diff --git a/ios/sdk/component/view/HippyShadowView.h b/ios/sdk/component/view/HippyShadowView.h index 3eb64fc6b87..f4463039e8c 100644 --- a/ios/sdk/component/view/HippyShadowView.h +++ b/ios/sdk/component/view/HippyShadowView.h @@ -70,6 +70,7 @@ typedef void (^HippyApplierVirtualBlock)(NSDictionary *)viewsWithNewFrame absolutePosition:(CGPoint)absolutePosition { - if (!MTTNodeHasNewLayout(node)) { + if (!MTTNodeHasNewLayout(node) && !_visibilityChanged) { return; } MTTNodesetHasNewLayout(node, false); @@ -170,9 +170,11 @@ - (void)applyLayoutNode:(MTTNodeRef)node }, { HippyRoundPixelValue(absoluteBottomRight.x - absoluteTopLeft.x), HippyRoundPixelValue(absoluteBottomRight.y - absoluteTopLeft.y) } }; - if (!CGRectEqualToRect(frame, _frame)) { + if (!CGRectEqualToRect(frame, _frame) || + _visibilityChanged) { _frame = frame; [viewsWithNewFrame addObject:self]; + _visibilityChanged = NO; } absolutePosition.x += MTTNodeLayoutGetLeft(node); @@ -414,6 +416,14 @@ - (BOOL)isHidden { return _hidden || [_visibility isEqualToString:@"hidden"]; } +- (void)setVisibility:(NSString *)visibility { + if (![_visibility isEqualToString:visibility]) { + _visibility = visibility; + _visibilityChanged = YES; + MTTNodeMarkDirty(self.nodeRef); + } +} + - (void)insertHippySubview:(HippyShadowView *)subview atIndex:(NSInteger)atIndex { [_hippySubviews insertObject:subview atIndex:atIndex]; if (![self isCSSLeafNode]) {