Permalink
Browse files

Fixed assertion caused by invalid layout of hidden Yoga nodes

Summary:
That's interesting!
If we apply `display: none;` style to some node, Yoga will stop calculation layout for this subtree (which is reasonable).
So, from RN perspective we have to stop applying layout for hidden subtree because it is meaningless and causes another errors.

Note: We do actually not support `display: none;` yet. It stops computing layout, but it does not hide the views!

Reviewed By: javache

Differential Revision: D5168651

fbshipit-source-id: 29a9385c76a0f9d637285fc0d268ccc39879ca0a
  • Loading branch information...
shergin authored and facebook-github-bot committed Jun 21, 2017
1 parent abfa63c commit ac3f345b071fbf762e7224fc6357ab2f7080575c
Showing with 8 additions and 1 deletion.
  1. +8 −1 React/Views/RCTShadowView.m
@@ -165,10 +165,17 @@ - (void)applyLayoutNode:(YGNodeRef)node
if (!YGNodeGetHasNewLayout(node)) {
return;
}
YGNodeSetHasNewLayout(node, false);
RCTAssert(!YGNodeIsDirty(node), @"Attempt to get layout metrics from dirtied Yoga node.");
YGNodeSetHasNewLayout(node, false);
if (YGNodeStyleGetDisplay(node) == YGDisplayNone) {
// If the node is hidden (has `display: none;`), its (and its descendants)
// layout metrics are invalid and/or dirtied, so we have to stop here.
return;
}
#if RCT_DEBUG
// This works around a breaking change in Yoga layout where setting flexBasis needs to be set explicitly, instead of relying on flex to propagate.
// We check for it by seeing if a width/height is provided along with a flexBasis of 0 and the width/height is laid out as 0.

0 comments on commit ac3f345

Please sign in to comment.