diff --git a/ReactCommon/yoga/yoga/Yoga.c b/ReactCommon/yoga/yoga/Yoga.c index 074fd01c2c5..a67b33d071d 100644 --- a/ReactCommon/yoga/yoga/Yoga.c +++ b/ReactCommon/yoga/yoga/Yoga.c @@ -2045,7 +2045,7 @@ static void YGNodelayoutImpl(const YGNodeRef node, } const bool flexBasisOverflows = - measureModeMainDim == YGMeasureModeUndefined ? false : totalFlexBasis > availableInnerMainDim; + measureModeMainDim == YGMeasureModeUndefined ? false : totalFlexBasis > availableInnerMainDim; if (isNodeFlexWrap && flexBasisOverflows && measureModeMainDim == YGMeasureModeAtMost) { measureModeMainDim = YGMeasureModeExactly; } @@ -2338,8 +2338,12 @@ static void YGNodelayoutImpl(const YGNodeRef node, childCrossSize = YGValueResolve(currentRelativeChild->resolvedDimensions[dim[crossAxis]], availableInnerCrossDim) + marginCross; - childCrossMeasureMode = - YGFloatIsUndefined(childCrossSize) ? YGMeasureModeUndefined : YGMeasureModeExactly; + const bool isLoosePercentageMeasurement = + currentRelativeChild->resolvedDimensions[dim[crossAxis]]->unit == YGUnitPercent && + measureModeCrossDim != YGMeasureModeExactly; + childCrossMeasureMode = YGFloatIsUndefined(childCrossSize) || isLoosePercentageMeasurement + ? YGMeasureModeUndefined + : YGMeasureModeExactly; } if (!YGFloatIsUndefined(currentRelativeChild->style.aspectRatio)) {