美文网首页
[实战]为什么 ScrollView 不能滚动到底部?

[实战]为什么 ScrollView 不能滚动到底部?

作者: 吴敬悦 | 来源:发表于2021-02-23 10:09 被阅读0次

标题会以最终内容中的问题为标题,问题可能包含多个,有可能只包含一个。

1. 为什么 ScrollView 不能滚动到底部?

我在网上百度和谷歌了,现在都是说不要在 ScrollView 的孩子节点上添加 paddingToppaddingBottom ,于是我就去掉了,但是仍然存在问题。实际场景是这样的:

<androidx.core.widget.NestedScrollView
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_marginTop="60dp"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toBottomOf="@+id/titleSalesmen">
  <androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 这里包含其他的很多节点 -->
    <!-- 由于不能设置marginBottom,所以我这里使用一个空节点代替 -->
    <View
      android:id="@+id/remainingSpace"
      android:layout_width="match_parent"
      android:layout_height="42dp"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toBottomOf="@+id/workbench_constraintlayout2" />
  </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

当我设置 NestedScrollViewandroid:layout_height 的值为一个确定的高时,我发现是可以的,于是我就怀疑是 NestedScrollView 的高度出现了问题,可以看 Design 效果:

NestedScrollView的高度
当我点击右下角的那个图标拖动显示视图时,我发现当拖到比图中的高度要低时,这时 NestedScrollView 的高度居然还是这么高,这说明 NestedScrollView 的高是内容的高度,并不是屏幕剩余空间的高度。

现在抛出第二个问题,为啥我设置了 0dp ,为啥不是剩余空间呢,而是内容的高度呢?
可以看到 NestedScrollView 的约束并没有底部约束,如果没有底部约束的话,那么就会出现下面会以自身内容作为高度,这样就很容易理解了,所以我们只需要给 NestedScrollView 添加底部约束即可:

<androidx.core.widget.NestedScrollView
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_marginTop="@dimen/public_ui_60dp"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toBottomOf="@+id/titleSalesmen">

也就是添加 app:layout_constraintBottom_toBottomOf="parent" 就可以了。

相关文章

网友评论

      本文标题:[实战]为什么 ScrollView 不能滚动到底部?

      本文链接:https://www.haomeiwen.com/subject/ixxrfltx.html