From a478ecb1bd819291b8be1f1cf8db2fbbbdd6c394 Mon Sep 17 00:00:00 2001 From: meyou <2636699780@qq.com> Date: Mon, 18 May 2026 22:06:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9C=88=E8=A7=86=E5=9B=BE?= =?UTF-8?q?=E9=A6=96=E5=B8=A7=E8=A1=8C=E5=A0=86=E5=8F=A0=EF=BC=9ArowHeight?= =?UTF-8?q?Px=20=E6=9C=AA=E5=B0=B1=E7=BB=AA=E6=97=B6=20alpha=3D0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit draw 阶段已读到更新后的 rowHeightPx,但 layout 仍用旧值时会出现行堆叠。 增加 layoutReady 守卫,首帧 rowHeightPx==0 时直接隐藏月视图。 --- .../kotlin/plus/rua/project/ui/CalendarMonthView.kt | 5 ++++- .../kotlin/plus/rua/project/CalendarViewModelTest.kt | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt index 324015d..1e1ba24 100644 --- a/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt +++ b/shared/src/commonMain/kotlin/plus/rua/project/ui/CalendarMonthView.kt @@ -233,6 +233,9 @@ fun CalendarMonthView( } val monthProgress = 1f - viewModel.yearViewProgress + // 组合阶段计算:lambda 捕获快照值,避免 draw 阶段读到已更新的 rowHeightPx + // 但 layout 仍用旧值导致行堆叠 + val layoutReady = rowHeightPx > 0 Box( modifier = Modifier .fillMaxSize() @@ -240,7 +243,7 @@ fun CalendarMonthView( val scale = lerp(0.3f, 1f, monthProgress) scaleX = scale scaleY = scale - alpha = monthProgress.coerceIn(0f, 1f) + alpha = if (layoutReady) monthProgress.coerceIn(0f, 1f) else 0f transformOrigin = TransformOrigin(anchorPivotX, anchorPivotY) } ) { diff --git a/shared/src/commonTest/kotlin/plus/rua/project/CalendarViewModelTest.kt b/shared/src/commonTest/kotlin/plus/rua/project/CalendarViewModelTest.kt index 0361dec..81c6947 100644 --- a/shared/src/commonTest/kotlin/plus/rua/project/CalendarViewModelTest.kt +++ b/shared/src/commonTest/kotlin/plus/rua/project/CalendarViewModelTest.kt @@ -18,7 +18,6 @@ class CalendarViewModelTest { private val fixedInstant = Instant.parse("2026-05-15T00:00:00Z") private val testClock = FixedClock(fixedInstant) - private fun createViewModel(): CalendarViewModel { val scope = CoroutineScope(Dispatchers.Unconfined) return CalendarViewModel(coroutineScope = scope, clock = testClock)