Wrong initial scroll position when toolbar has dynamic height
Opened this issue · 2 comments
Veeksi commented
My toolbar is built with ConstraintLayout and it depends on WindowInsets so I can calculate statusBarHeight like this:
toolbar = {
val paddingValues = WindowInsets.systemBars.asPaddingValues()
Box(
modifier = Modifier
.padding(top = paddingValues.calculateTopPadding())
.fillMaxWidth()
.height(300.dp),
contentAlignment = Alignment.BottomCenter
) {
Text("Hello")
}
}
When my toolbar container has dynamic height, the initial scrolling position is wrong because it doesn't care about dynamic statusBarHeight. You can reproduce the issue by placing those components into toolbar scope.
I am using scrollStrategy = ScrollStrategy.ExitUntilCollapsed,
You can see the actual problem in the video: https://streamable.com/i4gwqm
masterdev01 commented
@Composable
fun rememberStatusBarHeightDp(): Dp {
val view = LocalView.current
val density = LocalDensity.current
val statusBarHeightPx = remember {
ViewCompat.getRootWindowInsets(view)
?.getInsets(WindowInsetsCompat.Type.statusBars())
?.top ?: 0
}
return with(density) { statusBarHeightPx.toDp() }
}
Use this code for top padding