Намалюйте горизонтальне правило в React Native


96

Я спробував пакет response-native-hr - не працює у мене ні на Android, ні на iOS.

Наступний код також не підходить, оскільки він відображає три крапки в кінці

<Text numberOfLines={1}}>               
    ______________________________________________________________
</Text>

<Text> __________ Рівень {рівень} __________ </Text>
Омар Бахш

Відповіді:


294

Ви можете просто використовувати порожній вигляд із нижньою межею.

<View
  style={{
    borderBottomColor: 'black',
    borderBottomWidth: 1,
  }}
/>

49
Рекомендую borderBottomWidth: StyleSheet.hairlineWidth:)
Райан Перджент,

16
якщо це не працює, додайте alignSelf: 'stretch'.
Вчений

1
слід вказати значення WIDTH для подання.
Мохамед Бен Хартуз

завдяки цьому можна провести лінію, але ліворуч і праворуч є поле. Я хочу звернути встик
Abhi

@Abhi Це здається проблемою, яка не пов'язана з цією відповіддю. Будь ласка, створіть нове запитання, якщо ви не знайдете рішення
Антуан Граншам,

22

Можна використовувати поле, щоб змінити ширину рядка та розмістити його по центру.

import { StyleSheet } from 'react-native;
<View style = {styles.lineStyle} />

const styles = StyleSheet.create({
  lineStyle:{
        borderWidth: 0.5,
        borderColor:'black',
        margin:10,
   }
 });

якщо ви хочете динамічно надавати поля, тоді ви можете використовувати Dimension width.


Дякую. Ви також могли б, <View style = {styles.lineStyle} />оскільки нічого між ними не було ;-)
Мартін Нордстрем

Сміт styles.lineStyleвідповідав би const styles = StyleSheet.create({ lineStyle: ... });тут. Ви просто знаєте, lineStyle = { ...}що може спричинити проблему. Повне рішення styles.lineStyleможе бути const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr

так ти маєш рацію. тут я припускаю, що ви помістили lineStyleвсередину вашого StyleSheet.
Сміт

12

Нещодавно у мене була ця проблема.

<Text style={styles.textRegister}> ────────  Register With  ────────</Text>

з цим результатом:

Зображення


25
Це погано масштабується
Петрус Терон

так просто.
Siraj Alam

@PetrusTheron чому це погано масштабується?
Нейт Гленн,

Дефіси @NateGlenn будуть обгортатися на вузькому дисплеї або виглядати занадто тонкими на ширшому дисплеї.
Петрус Терон

Ах, це має сенс. Я думаю, що рішення буде чудовим, якщо вам потрібна лише дуже коротка лінія.
Нейт Гленн,

9

Я зробив це так. Сподіваюся, це допомагає

<View style={styles.hairline} />
<Text style={styles.loginButtonBelowText1}>OR</Text>
<View style={styles.hairline} />

для стилю:

hairline: {
  backgroundColor: '#A2A2A2',
  height: 2,
  width: 165
},

loginButtonBelowText1: {
  fontFamily: 'AvenirNext-Bold',
  fontSize: 14,
  paddingHorizontal: 5,
  alignSelf: 'center',
  color: '#A2A2A2'
},

Я думаю, що це найкраще рішення. Краще, ніж використовувати межу, як інші відповіді.
Ерік М. Шпренгель

Ширина жорсткого кодування може бути проблемою.
Годфрі,

9

Я зміг намалювати роздільник із flexboxвластивостями навіть з текстом у центрі рядка.

<View style={{flexDirection: 'row', alignItems: 'center'}}>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
  <View>
    <Text style={{width: 50, textAlign: 'center'}}>Hello</Text>
  </View>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
</View>

введіть тут опис зображення


1
Це найкраща відповідь, вона масштабується, і якщо ви не встановите ширину тексту, вона буде динамічною
newoda

5

Ви також можете спробувати react-native-hr-component

npm i react-native-hr-component --save

Ваш код:

import Hr from 'react-native-hr-component'

//..

<Hr text="Some Text" fontSize={5} lineColor="#eee" textPadding={5} textStyles={yourCustomStyles} hrStyles={yourCustomHRStyles} />

4
Це трохи надмірно
керівництвом

3

Це в коді React Native (JSX), оновленому на сьогодні:

<View style = {styles.viewStyleForLine}></View>

const styles = StyleSheet.create({
viewStyleForLine: {
    borderBottomColor: "black", 
    borderBottomWidth: StyleSheet.hairlineWidth, 
    alignSelf:'stretch',
    width: "100%"
  }
})

ви можете використовувати будь-який alignSelf:'stretch'або width: "100%"обидва повинні працювати ... і,

borderBottomWidth: StyleSheet.hairlineWidth

ось StyleSheet.hairlineWidthнайтонший, тоді,

borderBottomWidth: 1,

і так далі для збільшення товщини лінії.


3

У Lineмене працювало створення багаторазового компонента:

import React from 'react';
import { View } from 'react-native';

export default function Line() {
    return (
        <View style={{
            height: 1,
            backgroundColor: 'rgba(255, 255, 255 ,0.3)',
            alignSelf: 'stretch'
        }} />
    )
}

Тепер імпортуйте та використовуйте Lineде завгодно:

<Line />

2
import { View, Dimensions } from 'react-native'

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

// Create Component

<View style={{
   borderBottomColor: 'black', 
   borderBottomWidth: 0.5, 
   width: width - 20,}}>
</View>

2

Ви можете використовувати власний роздільник елементів.

Встановіть його за допомогою:

npm install --save react-native-elements
# or with yarn
yarn add react-native-elements

import { Divider } from 'react-native-elements'

Тоді перейдіть до:

<Divider style={{ backgroundColor: 'blue' }} />

Джерело


2
Встановлення цілого пакету (і, ймовірно, великого), здається надмірним, якщо вам потрібна лише горизонтальна лінія.
Сенді,

Звичайно, це надмірно, якщо ви будете використовувати лише <Divider /> компонент, однак, ви повинні використовувати бібліотеку в будь-якому випадку, щоб заощадити час на укладання простих кнопок, панелей пошуку тощо ... тощо ... Перевірте все, що він може зробити для вашого додатка response-native-elements.github.io/react-native-elements
jso1919

1

Чому б вам не зробити щось подібне?

<View
  style={{
    borderBottomWidth: 1,
    borderBottomColor: 'black',
    width: 400,
  }}
/>


0
import {Dimensions} from 'react-native'

const { width, height } = Dimensions.get('window')

<View
  style={{
         borderBottomColor: '#1D3E5E',
         borderBottomWidth: 1,
         width : width , 
  }}
/>

Код настільки зрозумілий для тих, хто має подібні проблеми, тому, якщо я зможу пояснити більше, я зроблю це.
Мохамед Бен Хартуз

0

Ось як я вирішив дільник з горизонтальними лініями та текстом у середині:

<View style={styles.divider}>
  <View style={styles.hrLine} />
  <Text style={styles.dividerText}>OR</Text>
  <View style={styles.hrLine} />
</View>

І стилі для цього:

import { Dimensions, StyleSheet } from 'react-native'

const { width } = Dimensions.get('window')

const styles = StyleSheet.create({
divider: {
    flexDirection: 'row',
    alignItems: 'center',
    marginTop: 10,
  },
  hrLine: {
    width: width / 3.5,
    backgroundColor: 'white',
    height: 1,
  },
  dividerText: {
    color: 'white',
    textAlign: 'center',
    width: width / 8,
  },
})


0

Якщо у вас твердий фон (наприклад, білий), це може бути вашим рішенням:

<View style={container}>
  <View style={styles.hr} />
  <Text style={styles.or}>or</Text>
</View>

const styles = StyleSheet.create({
  container: {
    flex: 0,
    backgroundColor: '#FFFFFF',
    width: '100%',
  },
  hr: {
    position: 'relative',
    top: 11,
    borderBottomColor: '#000000',
    borderBottomWidth: 1,
  },
  or: {
    width: 30,
    fontSize: 14,
    textAlign: 'center',
    alignSelf: 'center',
    backgroundColor: '#FFFFFF',
  },
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.