diff --git a/frameworks/core/components_ng/base/view_abstract.cpp b/frameworks/core/components_ng/base/view_abstract.cpp index 5853f4bf4435f324382f5c9ca72191c76e13e1ee..9dba30ef6bbaa2243d4a8feaf918e851e7fbb148 100644 --- a/frameworks/core/components_ng/base/view_abstract.cpp +++ b/frameworks/core/components_ng/base/view_abstract.cpp @@ -6426,6 +6426,11 @@ void ViewAbstract::SetOverlayNode(FrameNode* frameNode, FrameNode* node, const N auto overlayNode = AceType::WeakClaim(node).Upgrade(); if (overlayNode == nullptr) { frameNode->SetOverlayNode(nullptr); + auto layoutProperty = frameNode->GetLayoutProperty(); + CHECK_NULL_VOID(layoutProperty); + layoutProperty->UpdatePropertyChangeFlag(PROPERTY_UPDATE_MEASURE); + frameNode->MarkNeedSyncRenderTree(); + frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE); return; } frameNode->SetOverlayNode(overlayNode); diff --git a/frameworks/core/components_ng/layout/layout_property.cpp b/frameworks/core/components_ng/layout/layout_property.cpp index 4e05211b3364de73f0d2fd91973a3ca2b1048acf..067bff30edf32bc9d99355e0fa6ca809e92a4d83 100644 --- a/frameworks/core/components_ng/layout/layout_property.cpp +++ b/frameworks/core/components_ng/layout/layout_property.cpp @@ -1721,7 +1721,7 @@ void LayoutProperty::SetOverlayOffset( const std::optional& overlayOffsetX, const std::optional& overlayOffsetY) { bool xChanged = true; - bool yChanged = false; + bool yChanged = true; if ((!overlayOffsetX.has_value() && overlayOffsetX_.Value() == 0) || (overlayOffsetX.has_value() && overlayOffsetX.value() == overlayOffsetX_)) { xChanged = false; diff --git a/interfaces/native/node/style_modifier.cpp b/interfaces/native/node/style_modifier.cpp index 0e6563f8bc45323c0ca13673d9254485509f30e0..84f9228e8b0046c4d306b35198bf343e2c679de3 100644 --- a/interfaces/native/node/style_modifier.cpp +++ b/interfaces/native/node/style_modifier.cpp @@ -2752,7 +2752,7 @@ void ResetResponseRegion(ArkUI_NodeHandle node) int32_t SetOverlay(ArkUI_NodeHandle node, const ArkUI_AttributeItem* item) { - if (item->string == nullptr) { + if (item->string == nullptr && item->object == nullptr) { return ERROR_CODE_PARAM_INVALID; } auto* fullImpl = GetFullImpl(); diff --git a/test/unittest/interfaces/native_node_test.cpp b/test/unittest/interfaces/native_node_test.cpp index 67b9c1b38c29b4f53fc4371bb94d221ff7e9d5d6..759297e8b5f2f00c4909fc123beef4e18732d688 100644 --- a/test/unittest/interfaces/native_node_test.cpp +++ b/test/unittest/interfaces/native_node_test.cpp @@ -8639,8 +8639,6 @@ HWTEST_F(NativeNodeTest, NativeNodeOverlayTest001, TestSize.Level1) item4.string = ""; item4.object = overlayNode; - item4.size = 0; - nodeAPI->setAttribute(rootNode, NODE_OVERLAY, &item4); item4.size = 4; nodeAPI->setAttribute(rootNode, NODE_OVERLAY, &item4); auto overlayVal = nodeAPI->getAttribute(rootNode, NODE_OVERLAY);