底部导航栏与 Jetpack Compose 中的屏幕内容重叠

Gia*_*chi 19 android android-jetpack android-jetpack-compose

我有一个在 aBottomNavBar中被调用bottomBar的 a Scaffold
每个屏幕都包含一个LazyColumn显示一堆图像的。
出于某种原因,当我完成滚动时,BottomNavBar项目列表的下部重叠。
我怎样才能解决这个问题?

在此处输入图片说明

这里是MainActivity的设置内容

SetContent{
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text(text = "tartufozon") },
                actions = {
                    IconButton(onClick = { Timber.d("Mail clicked") }) {
                        Icon(Icons.Default.Email, contentDescription = null)
                    }
                }
            )
        },
        bottomBar = {
            BottomNavBar(navController = navController)
        }
    ) {
    BottomNavScreensController(navController = navController)
    }
}
Run Code Online (Sandbox Code Playgroud)

ian*_*ake 32

根据ScaffoldAPI 定义,您的内部内容(您所在的尾随 lambda BottomNavScreensController)被赋予一个PaddingValues对象,该对象为您的顶部应用栏、底部栏等提供适量的填充。

现在,您根本没有引用该填充,因此,您的内容没有被填充。这就是导致重叠的原因。

您可以Box在您的周围添加一个BottomNavScreensController以应用填充,或将填充直接传递给您的,BottomNavScreensController以便每个单独的屏幕都可以正确应用填充;两种解决方案都有效。

Scaffold(
    topBar = {
      //
    },
    bottomBar = {
        //
    }
    ) { innerPadding ->
        // Apply the padding globally to the whole BottomNavScreensController
        Box(modifier = Modifier.padding(innerPadding)) {
            BottomNavScreensController(navController = navController)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*nde 13

遵循ianhanniballake的回答及其评论,只是为了节省您几分钟的时间。代码类似于:

Scaffold(
    topBar = {
      //
    },
    bottomBar = {
        //
    }
    ) { innerPadding ->
        Box(modifier = Modifier.padding(
          PaddingValues(bottom = innerPadding.calculateBottomPadding()) {
            BottomNavScreensController(navController = navController)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


tho*_*iha 9

您不再需要进行任何计算。在脚手架内容中,执行以下操作:

content = { padding ->
  Column(
    modifier = Modifier.padding(padding)
  ) {...
Run Code Online (Sandbox Code Playgroud)


Joe*_*nyi 7

Scaffold(
    bottomBar = {
       BottomNavigationBar(navController = navController)
   }
) { innerPadding ->
      Box(modifier = Modifier.padding(innerPadding)) {
               DestinationsNavHost(
                  navGraph = NavGraphs.root,
                  navController = navController,
                  engine = navHostEngine
                )
         }
}
Run Code Online (Sandbox Code Playgroud)