onebone/compose-collapsing-toolbar

Wrong initial scroll position when toolbar has dynamic height

Opened this issue · 2 comments

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

Looks like PR #101 fixes this issue

   @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