mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Fix incorrect padding in SafeAreaView
Summary: Changelog: [Internal] `SafeAreaViewShadowNode` we made incorrect assumption that setting `style` on YGNode and then copying it, always copies the style. This is incorrect, style is only copied once `YGNodeCalculateLayout` has been called on either the node or its parent. Reviewed By: JoshuaGross Differential Revision: D22945677 fbshipit-source-id: 9c063c2dfe4d2390cf2fd10a96d2de418fa69376
This commit is contained in:
committed by
Facebook GitHub Bot
parent
4cdb1951b4
commit
b179c4bebe
+1
-4
@@ -35,10 +35,7 @@ class SafeAreaViewComponentDescriptor final
|
||||
shadowNode->getState());
|
||||
auto stateData = state->getData();
|
||||
|
||||
if (safeAreaViewShadowNode->alreadyAppliedPadding != stateData.padding) {
|
||||
safeAreaViewShadowNode->alreadyAppliedPadding = stateData.padding;
|
||||
layoutableShadowNode->setPadding(stateData.padding);
|
||||
}
|
||||
layoutableShadowNode->setPadding(stateData.padding);
|
||||
|
||||
ConcreteComponentDescriptor::adopt(shadowNode);
|
||||
}
|
||||
|
||||
@@ -12,13 +12,5 @@ namespace react {
|
||||
|
||||
extern const char SafeAreaViewComponentName[] = "SafeAreaView";
|
||||
|
||||
SafeAreaViewShadowNode::SafeAreaViewShadowNode(
|
||||
ShadowNode const &sourceShadowNode,
|
||||
ShadowNodeFragment const &fragment)
|
||||
: ConcreteViewShadowNode(sourceShadowNode, fragment),
|
||||
alreadyAppliedPadding(
|
||||
static_cast<SafeAreaViewShadowNode const &>(sourceShadowNode)
|
||||
.alreadyAppliedPadding) {}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
@@ -26,13 +26,6 @@ class SafeAreaViewShadowNode final : public ConcreteViewShadowNode<
|
||||
ViewEventEmitter,
|
||||
SafeAreaViewState> {
|
||||
using ConcreteViewShadowNode::ConcreteViewShadowNode;
|
||||
|
||||
public:
|
||||
EdgeInsets alreadyAppliedPadding{};
|
||||
|
||||
SafeAreaViewShadowNode(
|
||||
ShadowNode const &sourceShadowNode,
|
||||
ShadowNodeFragment const &fragment);
|
||||
};
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -285,12 +285,23 @@ void YogaLayoutableShadowNode::setPadding(RectangleEdges<Float> padding) const {
|
||||
ensureUnsealed();
|
||||
|
||||
auto style = yogaNode_.getStyle();
|
||||
style.padding()[YGEdgeTop] = yogaStyleValueFromFloat(padding.top);
|
||||
style.padding()[YGEdgeLeft] = yogaStyleValueFromFloat(padding.left);
|
||||
style.padding()[YGEdgeRight] = yogaStyleValueFromFloat(padding.right);
|
||||
style.padding()[YGEdgeBottom] = yogaStyleValueFromFloat(padding.bottom);
|
||||
yogaNode_.setStyle(style);
|
||||
yogaNode_.setDirty(true);
|
||||
|
||||
auto leftPadding = yogaStyleValueFromFloat(padding.left);
|
||||
auto topPadding = yogaStyleValueFromFloat(padding.top);
|
||||
auto rightPadding = yogaStyleValueFromFloat(padding.right);
|
||||
auto bottomPadding = yogaStyleValueFromFloat(padding.bottom);
|
||||
|
||||
if (leftPadding != style.padding()[YGEdgeLeft] ||
|
||||
topPadding != style.padding()[YGEdgeTop] ||
|
||||
rightPadding != style.padding()[YGEdgeRight] ||
|
||||
bottomPadding != style.padding()[YGEdgeBottom]) {
|
||||
style.padding()[YGEdgeTop] = yogaStyleValueFromFloat(padding.top);
|
||||
style.padding()[YGEdgeLeft] = yogaStyleValueFromFloat(padding.left);
|
||||
style.padding()[YGEdgeRight] = yogaStyleValueFromFloat(padding.right);
|
||||
style.padding()[YGEdgeBottom] = yogaStyleValueFromFloat(padding.bottom);
|
||||
yogaNode_.setStyle(style);
|
||||
yogaNode_.setDirty(true);
|
||||
}
|
||||
}
|
||||
|
||||
void YogaLayoutableShadowNode::setPositionType(
|
||||
|
||||
Reference in New Issue
Block a user