Dibujar una regla horizontal en React Native

97

He intentado reaccionar-hr-nativa paquete - no funciona para mí, ni en Android ni iOS.

El siguiente código tampoco es adecuado porque muestra tres puntos al final

<Text numberOfLines={1}}>               
    ______________________________________________________________
</Text>
gumkins
fuente
<Texto> __________ Nivel {nivel} __________ </Text>
Omar bakhsh

Respuestas:

295

Simplemente puede usar una Vista vacía con un borde inferior.

<View
  style={{
    borderBottomColor: 'black',
    borderBottomWidth: 1,
  }}
/>
Antoine Grandchamp
fuente
49
Recomiendo borderBottomWidth: StyleSheet.hairlineWidth:)
Ryan Pergent
16
si no funciona, considere agregar alignSelf: 'stretch'.
Scientist1642
1
debe especificar el valor de ANCHO para la vista.
Mohamed Ben Hartouz
por esta capaz de trazar línea pero izquierda y derecha hay un margen. Quiero dibujar de un extremo a otro
Abhi
@Abhi Eso parece un problema que no está relacionado con esta respuesta. Cree una nueva pregunta si no encuentra una solución
Antoine Grandchamp
22

Se puede usar el margen para cambiar el ancho de una línea y colocarla en el centro.

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

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

si desea dar un margen de forma dinámica, puede usar Ancho de dimensión.

Smit
fuente
Gracias. También podría hacerlo <View style = {styles.lineStyle} />porque no hay nada en el medio ;-)
Martin Nordström
Smit styles.lineStylecorrespondería a un const styles = StyleSheet.create({ lineStyle: ... });aquí. Tu solo tieneslineStyle = { ...} lo que causaría un problema. Una solución completa con styles.lineStylepodría ser const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr
Si. tienes razón. aquí supongo que pones lineStyledentro de tu StyleSheet.
Smit
12

Recientemente tuve este problema.

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

con este resultado:

Imagen

Martín Chinome
fuente
25
Esto no escala bien
Petrus Theron
Tan sencillo como eso.
Siraj Alam
@PetrusTheron ¿por qué no escala bien?
Nate Glenn
Los guiones de @NateGlenn se ajustarán en una pantalla estrecha o aparecerán demasiado delgados en una pantalla más ancha.
Petrus Theron
Ah, eso tiene sentido. Creo que la solución está bien si solo necesitas una línea muy corta.
Nate Glenn
9

Lo hice así. Espero que esto ayude

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

por estilo:

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

loginButtonBelowText1: {
  fontFamily: 'AvenirNext-Bold',
  fontSize: 14,
  paddingHorizontal: 5,
  alignSelf: 'center',
  color: '#A2A2A2'
},
sarin upreti
fuente
Creo que es la mejor solución. Mejor que usar el borde como otras respuestas.
Erick M. Sprengel
El ancho de codificación rígida puede ser un problema.
Godfrey
9

Pude dibujar un separador con flexboxpropiedades incluso con un texto en el centro de la línea.

<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>

ingrese la descripción de la imagen aquí

Azhar Zafar
fuente
1
Esta es la mejor respuesta, se escala y si no establece un ancho de texto será dinámico
newoda
5

También puedes probar react-native-hr-component

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

Tu codigo:

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

//..

<Hr text="Some Text" fontSize={5} lineColor="#eee" textPadding={5} textStyles={yourCustomStyles} hrStyles={yourCustomHRStyles} />
mehulmpt
fuente
4
Eso es un poco exagerado
Lideró el
3

Esto está en el código React Native (JSX), actualizado hasta hoy:

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

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

puede usar uno alignSelf:'stretch'o width: "100%"ambos deberían funcionar ... y,

borderBottomWidth: StyleSheet.hairlineWidth

aquí StyleSheet.hairlineWidthestá el más delgado, entonces,

borderBottomWidth: 1,

y así sucesivamente para aumentar el grosor de la línea.

Sree
fuente
3

La creación de un Linecomponente reutilizable funcionó para mí:

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'
        }} />
    )
}

Ahora, importe y use en Linecualquier lugar:

<Line />
Mohammad Zaid Pathan
fuente
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>
Filip Ilievski
fuente
2

Puede utilizar el divisor de elementos nativos.

Instálelo con:

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

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

Entonces ve con:

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

Fuente

Shanthan
fuente
2
Instalar un paquete completo (y probablemente uno grande) parece excesivo si solo necesita una línea horizontal.
Sandy
De acuerdo, es excesivo si solo usará el <Divider /> componente, sin embargo, debería usar una biblioteca de cualquier manera para ahorrar tiempo en el diseño de botones simples, barras de búsqueda, etc.etc ... Verifique todo lo que podría hacer por su aplicación react-native-elements.github.io/react-native-elements
jso1919
1

¿Por qué no haces algo como esto?

<View
  style={{
    borderBottomWidth: 1,
    borderBottomColor: 'black',
    width: 400,
  }}
/>
Viktor Seč
fuente
0

Quizás deberías intentar usar react-native-hr algo como esto:

<Hr lineColor='#b3b3b3'/>

documentación: https://www.npmjs.com/package/react-native-hr

J Dorrian
fuente
buscando problemas en el repositorio, no parece tan "activo" y actualizado en términos de dependencias :(
Hecho en Moon
0
import {Dimensions} from 'react-native'

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

<View
  style={{
         borderBottomColor: '#1D3E5E',
         borderBottomWidth: 1,
         width : width , 
  }}
/>
Mohamed Ben Hartouz
fuente
El código es tan claro para aquellos que tienen este tipo de problema, así que si puedo explicar más, lo haré.
Mohamed Ben Hartouz
0

Así es como resolví el divisor con líneas horizontales y texto en el medio:

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

Y estilos para esto:

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,
  },
})
Laszlo
fuente
0

Simplemente cree un componente de vista que tenga una altura pequeña.

<View style={{backgroundColor:'black', height:10}}/>
Guarda bosque
fuente
0

Si tiene un fondo sólido (como el blanco), esta podría ser su solución:

<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',
  },
});
Darius Rainys
fuente