From 4e03c545f473432ad6082bbfb75226181adbea15 Mon Sep 17 00:00:00 2001 From: Martin Guillon Date: Mon, 19 Oct 2026 19:37:51 +0200 Subject: [PATCH 1/2] fix(core): replay layout requests suppressed while resuming native updates _resumeNativeUpdates(..., shouldResumeRequestLayout) cleared the suspend flag but left _requetLayoutNeeded set, so a view updated with requestLayout suspended (recycled collection view cells) was measured again with its cached size and kept its previous dimensions. Call requestlayoutIfNeeded() after resuming, like onLoaded does. Co-Authored-By: Claude Sonnet 5.5 --- packages/core/ui/core/view-base/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/core/ui/core/view-base/index.ts b/packages/core/ui/core/view-base/index.ts index a7f36a157c..7a25493f41 100644 --- a/packages/core/ui/core/view-base/index.ts +++ b/packages/core/ui/core/view-base/index.ts @@ -823,6 +823,11 @@ export abstract class ViewBase extends Observable { if (!this._suspendNativeUpdatesCount) { this.onResumeNativeUpdates(); } + if (shouldResumeRequestLayout) { + // layout requests received while suspended were only recorded: replay them now, + // otherwise the next measure reuses the cached size and ignores the changes + this.requestlayoutIfNeeded(); + } } /** From 06777ea5a9a111909eb9c5c1a5a6e1cf8faf1e85 Mon Sep 17 00:00:00 2001 From: Martin Guillon Date: Mon, 19 Oct 2026 20:06:14 +0200 Subject: [PATCH 2/2] fix(ios): request layout when a css property without native setter changes 78c71a9ba moved the requestLayout call of CssAnimationProperty inside the `view[setNative]` check. Properties that have no native setter on iOS (height, width, margins) then never requested a layout when they changed: a view bound to new data kept its previous measured size (recycled collection view cells drawn offset in their cell). Request the layout whenever the value actually changed, setter or not. Co-Authored-By: Claude Sonnet 5.5 --- packages/core/ui/core/properties/index.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/core/ui/core/properties/index.ts b/packages/core/ui/core/properties/index.ts index b9c16ed010..7a387db102 100644 --- a/packages/core/ui/core/properties/index.ts +++ b/packages/core/ui/core/properties/index.ts @@ -834,9 +834,10 @@ export class CssAnimationProperty implements CssAnimationPro } } } - if (property.affectsLayout) { - view.requestLayout(); - } + } + // properties without a native setter (height, width, margins on iOS) still need the layout + if (property.affectsLayout && (computedValueChanged || isSet !== wasSet)) { + view.requestLayout(); } const eventName = property.eventName; if (computedValueChanged && (!__UI_USE_EXTERNAL_RENDERER__ || !view._suspendNativeUpdatesCount) && this.hasListeners(eventName)) {