问题:

我有一个包含两个子视图的ScrollView,我希望第一个子视图(我们称之为ViewA)有{flex:1},所以另一个子视图(ViewB)将粘在屏幕底部,但前提是它们的总高度小于屏幕.当然,如果它们高于屏幕,我希望它像往常一样滚动.

case 1(好):ViewA带有长文本,ViewB带有长文本滚动.https://rnplay.org/apps/slCivA

case 2(错误):带有短文本的ViewA,ViewB不会粘在底部.https://rnplay.org/apps/OmQakQ

try 过的解决方案:

所以我将ScrollView的style和contentContainerStyle设置为flex:1.我

case 3(糟糕):ViewB贴在底部,但整个画面不会滚动.https://rnplay.org/apps/wZgtWA

如果是bug-如何修复/解决?

谢谢

推荐答案

好吧,所以我无法单独通过造型来实现它,但我是这样做的:

  1. 渲染后测量页脚的高度(使用onLayoutmeasure)
  2. measure回调中,我将高度(如果需要)添加到ViewA和ViewB之间的间隔视图中,以便将ViewB放置在底部.
  3. 为了避免向用户显示" skip ",我隐藏(不透明度)ViewB,直到其位置固定.

我的CJSX代码(精简版):

Dimensions = require('Dimensions')
windowSize = Dimensions.get('window')

MyClass = React.createClass
  mixins: [TimerMixin]

  render: ->
    <ScrollView style={styles.container} automaticallyAdjustContentInsets={false}>
      <View style={styles.mainContainer}>
        ... THIS IS VIEW A ...      
      </View>
      {
        if !@state.footerWasFixed
          <View>
            <ActivityIndicatorIOS/>
          </View>
      }
      <View style={[styles.spacer, {height: @state.spacerSize || 0}]}></View>
      <View onLayout={@measureFooterPosition} style={[styles.extras, {opacity: if @state.footerWasFixed then 1 else 0 }]} ref='extras'>
        ... THIS IS VIEW B ...       
      </View>
    </ScrollView>


  measureFooterPosition: ->
    @refs.extras.measure(@fixFooterPosition)

  fixFooterPosition: (ox, oy, width, height) ->
    footerPosition = Math.round(oy + height)
    diff = windowSize.height - footerPosition
    if diff > 0
      @setState(spacerSize: diff)
    if !@state.footerWasFixed
      @setTimeout (=>
        @setState(footerWasFixed: true)
      ), 30

styles = StyleSheet.create(
  container:
    backgroundColor: 'grey'
    flex: 1
  spacer:
    backgroundColor: 'white'
  mainContainer:
    flex: 1
    backgroundColor: 'white'
  extras:
    backgroundColor: 'white')

这是一个非常简单的代码(我的观点要求比这更具体)但我希望它能帮助任何人.

React-native相关问答推荐

使用NextJS映射从数组中提取用户角色

如何在Reaction Native DrawerNavigation中添加注销功能

react 本机 TextInput 将其他元素移出屏幕

防止 React Native 在上下文值更改时重新安装组件

如何在react native 中从 axios 重定向并将数据传递给路由

我们应该在 react-native 移动应用程序中使用哪个图标库

TypeError:未定义不是对象(判断'theme.spacing [radius]')

React Native - Expo:fontFamily 'SimpleLineIcons' 不是系统字体,尚未通过 Font.loadAsync 加载

TextInput 防止 ScrollView 滚动

什么时候适合在 React 中使用构造函数?

如何在 mac 上卸载 react-native-cli?

获取没有地理位置 API React-native 的国家/城市?

在 React Native (iOS) 中支持动态类型

如何使用特定目标运行 react-native run-ios

在 React Native 中,如何使用浅渲染测试我的组件?

动态改变 React Native Flat List 中的列数

如何在 React Native 中等待 Alert 对话框的响应?

zoom 到指定的标记 react-native-maps

以编程方式读取 app.json(或 exp.json)

手动调用 React.PropTypes 验证 React native "^0.30.0"