• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

android - 使用 ScrollView 的 Flex 布局

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:25:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我用 Flexbox 在 React Native 中为屏幕制作布局已经有一段时间了,直到今天我不得不制作这个非常简单的布局时才遇到任何问题:

  • 标题部分(不是导航栏)。
  • 一个 content 部分 → 一个带有 FlatList 的 ScrollView。
  • 页脚部分。

我希望内容部分比页眉和页脚大 3 倍,所以我很自然地将 flex 设置为 1(页眉)、3(内容)、1(页脚)。

无论如何,内容仍然像有 flex: 1
我可以按照我想要的方式控制布局的唯一方法是保留内容的 flex: 1 并将页脚和页眉设置为 flex: 0.33

我怀疑这可能与我设置为 flexGrow: 1, flexShrink: 1 的 ScrollView 的 contentContainerStyle 属性有关。

这是一个 minimal example 再现了这一点。



Best Answer-推荐答案


更新 2:

有人指出,我不应该使用包装在 ScrollView 中的 ListView,因为可能会发生以下情况:

  • 这可能会导致一些奇怪的行为,例如 onEndReached 连续触发。

  • 将 ListView 包裹在 ScrollView 中,使得父滚动 Action 支配子滚动 Action ,从而仅导致 ScrollView 滚动。


好的,我不确定为什么会这样,但经过数小时的尝试找到了解决方案:

Update 1中提到的步骤之后,我在ScrollView<内部的FlatList中添加了如下样式flexGrow: 0/strong> 并且内容居中并减小内容的大小直到它变得可滚动也可以完美地工作。

基本上这是生成的代码:

render() {
    return (
      <View style={{ flex: 1 }}>
        <View style={{ flex: 1 }}>
          <Text>HEADER</Text>
        </View>
        <View style={{ flex: 6 }}>  // Change this to affect ScrollView size
          <ScrollView contentContainerStyle={{ flexGrow: 1, justifyContent: 'center' }}>
            <FlatList
              data={listItems}
              renderItem={Item}
              keyExtractor={(index, item) => item}
              style={{ flexGrow: 0 }}  // This was the solution to centering
            />
          </ScrollView>
        </View>
        <View style={{ flex: 1 }}>
          <Text>FOOTER</Text>
        </View>
      </View>
    );
  }

这是最后的 Working Solution 如果你想试试的话。


更新 1:

通过使用 flex: 1 将 ScrollView 包装在 View 中 来正常使用 Flex 控制 ScrollView 的大小(即首先使用整数 flex 值)。

缺点是,如果我将 Scrollable 部分(内容)设置为足够高的 flex 值,使其不再可滚动,则内容不会居中显示。即使应用了 justifyContent: 'center' 也不行。

这里是 UPDATE 1 example

关于android - 使用 ScrollView 的 Flex 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51620456/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap