2016-11-29 5 views
0

Использование реагировать родной, как я могу построить сравнительную таблицу, которая выглядит как https://www.edrawsoft.com/templates/images/smart-phone-comparison-table.pngРеагировать Native вид сетки, чтобы показать сравнительную таблицу

Я также хочу иметь заголовок раздела, если это возможно. Например, цена не в своей колонке, но похож на заголовок таблицы раздела в прошивкой мнение Список даст мне один столбец, но я хочу несколько столбцов

Благодаря

EDIT: Ниже код работает, но проблема в том, что если я прокручиваю по горизонтали, тогда прокручивается только одно представление списка. Я хочу, чтобы они оба прокручивали. (Я в основном пытаюсь сделать строки и столбцы, как Excel, в моем случае данные могут быть большими (30 строк и столбцов 5-8), и я не хочу, чтобы это жёстко.)

render() { 
    return (
     <ScrollView> 
     <ListView horizontal 
     style={styles.container} 
     dataSource={this.state.dataSource} 
     renderRow={this.renderRow} 
     /> 

     <ListView horizontal 
     style={styles.container} 
     dataSource={this.state.dataSource} 
     renderRow={this.renderRow} 
     /> 

     </ScrollView> 
    ) 

В ниже изображения я хочу оба представления списка прокручиваться, когда второй один прокручивается, но, как видно на изображении только второй ListView прокрутки и не первый ... enter image description here

+0

Там нет вне коробки компонента Столика в реакции родной. но нетрудно сделать это с помощью ListView и вывести каждую строку с помощью 'style = {{flex: 1, flexDirection: 'row'}}' – Takahiro

+0

@Takahiro Спасибо за комментарий. Я не хочу жестко задавать значения. Данные будут поступать с сервера. Я попробовал обновленный код выше, но проблема в том, что если я прокручу по горизонтали, будет прокручиваться только одно представление списка. Я хочу, чтобы они оба прокручивали. – Yahoo

+0

Зачем вам нужно несколько списков ListView? Я думал, тебе нужен только один (за столом). И, конечно, вам не нужно жестко кодировать значения, если вы используете ListViewDataSource. все, что вам нужно сделать, это преобразовать ваш DataSource и отобразить каждую строку в виде списка ячеек, а также использовать гибкую схему для их выравнивания. – Takahiro

ответ

1

Это может быть очень легко достигается с помощью стильный дизайн. Если вы новичок в React-native. Listview является довольно сложным при первом взгляде (Datasource, что это с клоном со строками {rowHasChanged: (r1, r2) => r1! == r2}) ??). Чтобы упростить и лучше понять Flex-box, это должно сделать вашу работу. Но ListView более рекомендуется. enter image description here

import React, { Component } from 'react'; 
import { AppRegistry,View, ListView, StyleSheet,Text } from 'react-native'; 

class Example extends Component{ 
    render() { 
    return (
     <View style={{flex:1}}> 

      <View style={styles.Row}> 
       <View style={styles.Box1}> 
        <Text>Box 1</Text> 
       </View> 
       <View style={styles.Box2}> 
        <Text>Box 2</Text> 
       </View> 
       <View style={styles.Box1}> 
        <Text>Box 3</Text> 
       </View> 
       {/* 
       <View.... 
       The more Views you add here the more horizontal Boxes you have 
       */} 
      </View> 


      <View style={styles.Row}> 
       <View style={styles.Box2}> 
        <Text>Box 1</Text> 
       </View> 
       <View style={styles.Box1}> 
        <Text>Box 2</Text> 
       </View> 
       <View style={styles.Box2}> 
        <Text>Box 3</Text> 
       </View> 
      </View> 
      {/* 
      <View.... 
      The more Views you add here the more rows you have 
      */} 

     </View> 
    ) 
    } 
} 

const styles = StyleSheet.create({ 
    Row : {flex:1,flexDirection:'row'}, 
    Box1 : {flex:1,backgroundColor:'tan',alignItems:'center',justifyContent:'center'}, 
    Box2 : {flex:1,backgroundColor:'coral',alignItems:'center',justifyContent:'center'}, 
}); 

module.exports = Example 
+0

Спасибо, но как я могу использовать ListView для этого? Как моя таблица будет действительно большой, и данные будут получены с сервера.? Я пробовал код ниже, но если прокрутить один список, другой не будет прокручиваться по горизонтали, который я хочу. (См. Выше, я обновил ответ с помощью кода) – Yahoo

+0

Вы пытаетесь реализовать два вида списка параллельно (один слева и один справа), из которых оба должны прокручиваться независимо. – Vkrm

+0

Да, это единственный способ, с помощью которого можно создать сетку. @Vkrm – Yahoo

0

enter image description here

<View> 
    <View style={{flexDirection:'row'}}> 
    <ScrollView horizontal ={true} showsHorizontalScrollIndicator= {false}> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
    </ScrollView> 
    </View> 
    <View style={{flexDirection:'row'}}> 
    <ScrollView horizontal ={true} showsHorizontalScrollIndicator= {false}> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
     <View style={{width:100,height:30}}><Text>Button</Text></View> 
    </ScrollView> 
    </View> 
</View> 

Я не могу вставить изображение в комментарий. Итак, добавив в качестве ответа.

+0

Это замечательно, спасибо, но я хочу, чтобы обе строки прокручивались одновременно. Я хочу создать таблицу сравнения, например https://www.edrawsoft.com/templates/images/smart-phone-comparison-table.png. Данные будут поступать с сервера, поэтому я также не знаю, сколько строк и столбцов будет там. – Yahoo

1
import React, { Component } from 'react'; 
import { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View, 
    ScrollView 
} from 'react-native'; 

class MultiScroll extends Component { 

    render() { 
    var tableData = [] 
    for(i = 0; i < 90; i++){ 
     tableData.push(['Row '+ i + ' Item 1','Row '+ i + ' Item 2','Row '+ i + ' Item 3','Row '+ i + ' Item 4','Row '+ i + ' Item 5','Row '+ i + ' Item 6','Row '+ i + ' Item 7','Row '+ i + ' Item 8','Row '+ i + ' Item 9','Row '+ i + ' Item 10']) 
    } 
    return (
     <View> 
      <View style={{flexDirection:'row',marginTop:0}}> 
      <ScrollView> 
      <ScrollView horizontal = {true} showsHorizontalScrollIndicator= {false}> 
       <View style={{}}> 
        { 
        tableData.map((eachRow,j) => { 
          return (
          <View style={{flexDirection:'row'}} key = {j}> 
           { 
            eachRow.map((eachItem,i) => { 
            return <View key = {i} style={{width:100,height:30,backgroundColor:(((j+i)%2)?'tan':'coral'),alignItems:'center',justifyContent:'center'}}><Text>{eachItem}</Text></View> 
            }) 
           } 
          </View> 
         ); 
         }) 
        } 
       </View> 
      </ScrollView> 
      </ScrollView> 
      </View> 
     </View> 
    ); 
    } 
} 

module.exports = MultiScroll 

enter image description here Надеется, что это помогает :)

+0

Это потрясающе! Просто хочу, чтобы я хотел. Спасибо! :) Одна последняя вещь, если у меня есть сказать 90 строк, то моя вертикальная полоса прокрутки не работает, если я помещаю горизонтальный вид прокрутки внутри вертикальной Yahoo

+0

Спасибо за обновление, но я по-прежнему не могу прокручивать по вертикали. Он отскакивает автоматически. Это для вас тоже? @Vkrm – Yahoo

+0

У меня нет проблемы с прокруткой по вертикали. Вероятно, попробуйте установить родительский компонент, который удерживает этот компонент для гибки: 1. – Vkrm

Смежные вопросы