@@ -985,32 +985,45 @@ - (void)renderMoveViews:(const std::vector<int32_t> &&)ids
985985 std::lock_guard<std::mutex> lock ([self renderQueueLock ]);
986986 HippyShadowView *fromShadowView = [_shadowViewRegistry componentForTag: @(fromContainer) onRootTag: @(rootTag)];
987987 HippyShadowView *toShadowView = [_shadowViewRegistry componentForTag: @(toContainer) onRootTag: @(rootTag)];
988+ std::vector<int32_t > moved_ids_render_idxs;
989+ moved_ids_render_idxs.reserve (ids.size ());
990+
988991 for (int32_t hippyTag : ids) {
989992 HippyShadowView *view = [_shadowViewRegistry componentForTag: @(hippyTag) onRootTag: @(rootTag)];
990993 if (!view) {
991994 HippyLogWarn (@" Invalid Move, No ShadowView! (%d of %d )" , hippyTag, rootTag);
992995 continue ;
993996 }
997+ auto domNode = view.domNode .lock ();
998+ if (!domNode) {
999+ HippyLogWarn (@" DomNode is null for view tag %d " , hippyTag);
1000+ continue ;
1001+ }
1002+ int32_t nodeRenderIndex = domNode->GetRenderInfo ().index ;
1003+ moved_ids_render_idxs.push_back (nodeRenderIndex);
1004+
9941005 HippyAssert (fromShadowView == [view parent ], @" ShadowView(%d )'s parent should be %d " , hippyTag, fromContainer);
9951006 [view removeFromHippySuperview ];
996- [toShadowView insertHippySubview: view atIndex: index ];
1007+ [toShadowView insertHippySubview: view atIndex: nodeRenderIndex ];
9971008 }
9981009 [fromShadowView dirtyPropagation: NativeRenderUpdateLifecycleLayoutDirtied];
9991010 [toShadowView dirtyPropagation: NativeRenderUpdateLifecycleLayoutDirtied];
10001011 [fromShadowView didUpdateHippySubviews ];
10011012 [toShadowView didUpdateHippySubviews ];
10021013 auto strongTags = std::move (ids);
1014+
10031015 [self addUIBlock: ^(__unused HippyUIManager *uiManager, NSDictionary <NSNumber *,__kindof UIView *> *viewRegistry) {
10041016 UIView *fromView = [viewRegistry objectForKey: @(fromContainer)];
10051017 UIView *toView = [viewRegistry objectForKey: @(toContainer)];
1006- for (int32_t tag : strongTags) {
1018+ for (int i = 0 ; i < strongTags.size (); i++) {
1019+ int32_t tag = strongTags[i];
10071020 UIView *view = [viewRegistry objectForKey: @(tag)];
10081021 if (!view) {
10091022 continue ;
10101023 }
1011- HippyAssert (fromView == [view parent ], @" parent of object view with tag %d is not object view with tag %d " , tag, fromContainer);
1024+ HippyAssert (fromView == [view parent ], @" Parent of View( %d ) should be %@ ( %d )! " , tag, fromView , fromContainer);
10121025 [view removeFromHippySuperview ];
1013- [toView insertHippySubview: view atIndex: index ];
1026+ [toView insertHippySubview: view atIndex: moved_ids_render_idxs[i] ];
10141027 }
10151028 [fromView clearSortedSubviews ];
10161029 [fromView didUpdateHippySubviews ];
0 commit comments