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>

<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,
  }}
/>

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.


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


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'
},

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í


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

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.


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

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

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


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,
  }}
/>


0
import {Dimensions} from 'react-native'

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

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

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,
  },
})

0

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

<View style={{backgroundColor:'black', height:10}}/>

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',
  },
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.