Подтвердить что ты не робот

Минимальная ширина/высота в React Native

Как установить минимальную ширину или высоту для компонента React Native?

В css я могу использовать min-width/min-height

https://facebook.github.io/react-native/docs/flexbox.html#content

Не существует minWidth/minHeight для интерактивных документов

4b9b3361

Ответ 1

Свойства minHeight, maxHeight, minWidth и maxWidth поддерживаются в версии с естественной реакцией 0,29,0 для iOS и Android.

Ниже приведено описание maxHeight из исходной документации. Это описание также относится к другим свойствам стиля min/max.

maxHeight - максимальная высота для этого компонента, в логические пиксели.

Он работает аналогично max-height в CSS, но в React Native вы должны используйте баллы или проценты. Ems и другие устройства не поддерживаются.

See https://developer.mozilla.org/en-US/docs/Web/CSS/max-height for more details.

Дурацкий пример:

<View
  style={{
    minWidth: '20%',
    maxWidth: 500,
    minHeight: '10%',
    maxHeight: 150,
  }}
/>

Ответ 2

Я смог найти решение для вас. Вот рабочая демка... https://rnplay.org/apps/vaD1iA

И вот ключевые части.

Сначала вы увеличиваете размеры устройства...

var Dimensions = require('Dimensions');
var {
  width,
  height
} = Dimensions.get('window');

Здесь компонент кнопки, который использует ширину устройства в качестве основы для кнопки с

const Button = React.createClass({
  render(){
    return(
      <TouchableHighlight>
        <Text style={[styles.button,{width: width - 20}]}>
          {this.props.children}
        </Text>
      </TouchableHighlight>
    )
  }
});

Тогда, как вы можете видеть здесь, ширина кнопки будет одинаковой независимо от ширины содержимого ярлыка.

enter image description here

Ответ 3

Этот ответ устарел, используйте ответ halilb.

Я решил это, используя опору onLayout, это очень просто:

Пример:

Шаг 1: Я создаю в нашем состоянии опору, которая будет содержать текущую высоту изображения с именем curImgHeight.

constructor(){
  super(props);
  this.state={curImgHeight:0}
}

Шаг 2: Используйте опору в любом View или Element, который поддерживает опору onLayout.

Здесь я использую его с Image. Затем все, что нам нужно сделать, это изменить это свойство состояния, если фактическая высота изображения меньше нашей минимальной высоты.

render(){
  <Image
    source={{uri: "https://placehold.it/350x150"}}
    resizeMode='cover'

    style={[styles.image, {height:(this.state.curImgHeight<=0?null:this.state.curImgHeight)}]}

    onLayout={(e)=>{
      let {height} = e.nativeEvent.layout;
      let minimumImgHeight = 400; //We set the minimum height we want here.
      if(height<= minimumImgHeight){ //Whenever the real height of the image is less than the minimum height
        this.setState({curImgHeight:minimumImgHeight}); //just change the curImgHeight state property to the minimum height.
      }
    }}
  />
}

Вот как я решил это для меня.

ps: во время поиска я обнаружил, что реактивная версия неофициально поддерживает minHeight и maxHeight, но только для iOS, а не для Android. Я бы не посмел их использовать. Приведенный выше код работает хорошо и дает мне контроль.

Ответ 4

Вы можете сделать что-то подобное:

_getButtonStyle() {
  var style = {height:36,padding:8}

  if(this.props.buttonText.length < 4){
    style.width = 64
  }
  return style
}

Ответ 5

Вы можете использовать minHeight или flexBasis - это похоже.