diff --git a/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm b/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm index 04c201d773..c9dc5f98d7 100644 --- a/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm +++ b/React/Fabric/Mounting/UIView+ComponentViewProtocol.mm @@ -63,7 +63,9 @@ using namespace facebook::react; - (void)updateLayoutMetrics:(LayoutMetrics const &)layoutMetrics oldLayoutMetrics:(LayoutMetrics const &)oldLayoutMetrics { - if (layoutMetrics.frame != oldLayoutMetrics.frame) { + bool forceUpdate = oldLayoutMetrics == EmptyLayoutMetrics; + + if (forceUpdate || (layoutMetrics.frame != oldLayoutMetrics.frame)) { CGRect frame = RCTCGRectFromRect(layoutMetrics.frame); if (!std::isfinite(frame.origin.x) || !std::isfinite(frame.origin.y) || !std::isfinite(frame.size.width) || @@ -86,13 +88,13 @@ using namespace facebook::react; self.bounds = CGRect{CGPointZero, frame.size}; } - if (layoutMetrics.layoutDirection != oldLayoutMetrics.layoutDirection) { + if (forceUpdate || (layoutMetrics.layoutDirection != oldLayoutMetrics.layoutDirection)) { self.semanticContentAttribute = layoutMetrics.layoutDirection == LayoutDirection::RightToLeft ? UISemanticContentAttributeForceRightToLeft : UISemanticContentAttributeForceLeftToRight; } - if (layoutMetrics.displayType != oldLayoutMetrics.displayType) { + if (forceUpdate || (layoutMetrics.displayType != oldLayoutMetrics.displayType)) { self.hidden = layoutMetrics.displayType == DisplayType::None; } } diff --git a/ReactCommon/fabric/core/layout/LayoutMetrics.h b/ReactCommon/fabric/core/layout/LayoutMetrics.h index 10fd949f63..12980f65f2 100644 --- a/ReactCommon/fabric/core/layout/LayoutMetrics.h +++ b/ReactCommon/fabric/core/layout/LayoutMetrics.h @@ -57,29 +57,10 @@ struct LayoutMetrics { * Represents some undefined, not-yet-computed or meaningless value of * `LayoutMetrics` type. * The value is comparable by equality with any other `LayoutMetrics` value. - * All individual sub-properties of `EmptyLayoutMetrics` have the most possible - * "invalid" values; this is useful when we compare them with some valid values. */ -static const LayoutMetrics EmptyLayoutMetrics = { - /* .frame = */ { - /* .origin = */ {std::numeric_limits::min(), - std::numeric_limits::min()}, - /* .size = */ - {std::numeric_limits::min(), std::numeric_limits::min()}, - }, - /* .contentInsets = */ - {std::numeric_limits::min(), - std::numeric_limits::min(), - std::numeric_limits::min(), - std::numeric_limits::min()}, - /* .borderWidth = */ - {std::numeric_limits::min(), - std::numeric_limits::min(), - std::numeric_limits::min(), - std::numeric_limits::min()}, - /* .displayType = */ (DisplayType)-1, - /* .layoutDirection = */ (LayoutDirection)-1, - /* .pointScaleFactor = */ std::numeric_limits::min()}; +static LayoutMetrics const EmptyLayoutMetrics = { + /* .frame = */ {{0, 0}, {-1.0, -1.0}} +}; } // namespace react } // namespace facebook