diff --git a/src/Layout.js b/src/Layout.js index db06c972..905ed392 100755 --- a/src/Layout.js +++ b/src/Layout.js @@ -267,11 +267,13 @@ var computeLayout = (function() { } else if (alignItem == CSS_ALIGN_FLEX_END) { leadingCrossDim += remainingCrossDim; } else if (alignItem == CSS_ALIGN_STRETCH) { - child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] - - getPadding(node, leading[crossAxis]) - - getPadding(node, trailing[crossAxis]) - - getMargin(child, leading[crossAxis]) - - getMargin(child, trailing[crossAxis]); + if (!isDimDefined(child, crossAxis)) { + child.layout[dim[crossAxis]] = node.layout[dim[crossAxis]] - + getPadding(node, leading[crossAxis]) - + getPadding(node, trailing[crossAxis]) - + getMargin(child, leading[crossAxis]) - + getMargin(child, trailing[crossAxis]); + } } child.layout[pos[crossAxis]] += leadingCrossDim; } diff --git a/src/__tests__/Layout-test.js b/src/__tests__/Layout-test.js index 6ebc63af..2dc7cf15 100755 --- a/src/__tests__/Layout-test.js +++ b/src/__tests__/Layout-test.js @@ -518,6 +518,23 @@ describe('Layout', function() { ); }); + it('should layout node with specified width and stretch', function() { + testLayout( + {style: {}, children: [{ + style: {}, children: [ + {style: {width: 400}} + ]}, + {style: {width: 200, alignSelf: 'stretch'}} + ]}, + {width: 400, height: 0, top: 0, left: 0, children: [ + {width: 400, height: 0, top: 0, left: 0, children: [ + {width: 400, height: 0, top: 0, left: 0} + ]}, + {width: 200, height: 0, top: 0, left: 0} + ]} + ); + }); + it('should layout randomly', function() { function RNG(seed) { this.state = seed;