2016-08-23 2 views
9

Я хотел использовать компонент Picker в моем приложении React Native, но он занимает слишком большую высоту экрана. Есть ли способ сделать лимит лидера сам показывать только, скажем, по два элемента за раз, а затем прокручиваться внутри?Есть ли способ подстроить компонент Picker для React Native и уменьшить его высоту?

ответ

-2

Что об этом от NativeBase:

import React, { Component } from 'react'; 
import { Container, Content, Picker } from 'native-base'; 
const Item = Picker.Item;​ 
export default class PickerExample extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      selectedItem: undefined, 
      selected1: 'key1', 
      results: { 
       items: [] 
      } 
     } 
    } 
    onValueChange (value: string) { 
     this.setState({ 
      selected1 : value 
     }); 
    } 
    render() { 
     return (
      <Container> 
       <Content> 
        <Picker 
         iosHeader="Select one" 
         mode="dropdown" 
         selectedValue={this.state.selected1} 
         onValueChange={this.onValueChange.bind(this)}> 
         <Item label="Wallet" value="key0" /> 
         <Item label="ATM Card" value="key1" /> 
         <Item label="Credit Card" value="key2" /> 
         <Item label="Debit Card" value="key3" /> 
        </Picker> 
       </Content> 
      </Container> 
     ); 
    } 
} 

https://docs.nativebase.io/COMPONENTS.html#Picker

+2

Он спросил о RN подборщика и вы предлагаете совершенно разные Lib –

4

От игры вокруг с моделированием, это выглядит как самая важная часть, чтобы установить itemStyle опору и определить значение height там. Вероятно, вы также захотите стилизовать сам компонент Picker и установить значение height, чтобы оно было одинаковым для самых лучших результатов, но вам не нужно для этого нужно.

О попытке показать две строки:

  • Отображение один элемент выглядит вокруг высоты 44.
  • Вы не можете показать ровно два элемента прошивкой из-за того, как родной компонент Picker разработан. Он покажет части того, что выше и ниже текущего выбранного значения. Поэтому в лучшем случае вы можете показать половину половины этих значений. Вам нужно будет поиграть с высотой, чтобы найти что-то, что сработает для вас.

Minimal Пример:

<Picker style={{width: 200, height: 44}} itemStyle={{height: 44}}> 
    <Picker.Item label="Java" value="java" /> 
    <Picker.Item label="JavaScript" value="js" /> 
</Picker> 

Вот Snack показывает полный пример для различной высоты (код копия вставленный ниже):

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

export default class App extends Component { 
    constructor(props) { 
    super(props) 

    this.state = { 
     language: 'haxe', 
     firstLanguage: 'java', 
     secondLanguage: 'js', 
    } 
    } 

    render() { 
    return (
     <View style={styles.container}> 
     <Text style={styles.title}>Unstyled:</Text> 
     <Picker 
      style={[styles.picker]} itemStyle={styles.pickerItem} 
      selectedValue={this.state.language} 
      onValueChange={(itemValue) => this.setState({language: itemValue})} 
     > 
      <Picker.Item label="Java" value="java" /> 
      <Picker.Item label="JavaScript" value="js" /> 
      <Picker.Item label="Python" value="python" /> 
      <Picker.Item label="Haxe" value="haxe" /> 
     </Picker> 

     <Text style={styles.title}>Shows one row:</Text> 
     <Picker 
      style={[styles.onePicker]} itemStyle={styles.onePickerItem} 
      selectedValue={this.state.firstLanguage} 
      onValueChange={(itemValue) => this.setState({firstLanguage: itemValue})} 
     > 
      <Picker.Item label="Java" value="java" /> 
      <Picker.Item label="JavaScript" value="js" /> 
      <Picker.Item label="Python" value="python" /> 
      <Picker.Item label="Haxe" value="haxe" /> 
     </Picker> 

     <Text style={styles.title}>Shows above and below values:</Text> 
     <Picker 
      style={[styles.twoPickers]} itemStyle={styles.twoPickerItems} 
      selectedValue={this.state.secondLanguage} 
      onValueChange={(itemValue) => this.setState({secondLanguage: itemValue})} 
     > 
      <Picker.Item label="Java" value="java" /> 
      <Picker.Item label="JavaScript" value="js" /> 
      <Picker.Item label="Python" value="python" /> 
      <Picker.Item label="Haxe" value="haxe" /> 
     </Picker> 
     </View> 
    ); 
    } 
} 

const styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    flexDirection: 'column', 
    alignItems: 'center', 
    padding: 20, 
    backgroundColor: 'white', 
    }, 
    title: { 
    fontSize: 18, 
    fontWeight: 'bold', 
    marginTop: 20, 
    marginBottom: 10, 
    }, 
    picker: { 
    width: 200, 
    backgroundColor: '#FFF0E0', 
    borderColor: 'black', 
    borderWidth: 1, 
    }, 
    pickerItem: { 
    color: 'red' 
    }, 
    onePicker: { 
    width: 200, 
    height: 44, 
    backgroundColor: '#FFF0E0', 
    borderColor: 'black', 
    borderWidth: 1, 
    }, 
    onePickerItem: { 
    height: 44, 
    color: 'red' 
    }, 
    twoPickers: { 
    width: 200, 
    height: 88, 
    backgroundColor: '#FFF0E0', 
    borderColor: 'black', 
    borderWidth: 1, 
    }, 
    twoPickerItems: { 
    height: 88, 
    color: 'red' 
    }, 
});