Zeichnen Sie eine horizontale Regel in React Native


93

Ich habe das React-Native-HR- Paket ausprobiert - funktioniert weder für mich noch für Android oder iOS.

Der folgende Code ist ebenfalls nicht geeignet, da am Ende drei Punkte gerendert werden

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

<Text> __________ Level {Level} __________ </ Text>
Omar bakhsh

Antworten:


279

Sie können einfach eine leere Ansicht mit einem unteren Rand verwenden.

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

45
Ich empfehle borderBottomWidth: StyleSheet.hairlineWidth:)
Ryan Pergent

13
Wenn dies nicht funktioniert, fügen Sie alignSelf hinzu: 'strecken'.
Scientist1642

1
Sie sollten den WIDTH-Wert für die Ansicht angeben.
Mohamed Ben Hartouz

durch diese in der Lage, Linie zu ziehen, aber links und rechts gibt es einen Rand. Ich möchte Ende zu Ende ziehen
Abhi

@Abhi Das scheint ein Problem zu sein, das nicht mit dieser Antwort zusammenhängt. Bitte erstellen Sie eine neue Frage, wenn Sie keine Lösung finden
Antoine Grandchamp

22

Man kann den Rand verwenden, um die Breite einer Linie zu ändern und sie in der Mitte zu platzieren.

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

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

Wenn Sie den Rand dynamisch angeben möchten, können Sie die Bemaßungsbreite verwenden.


Vielen Dank. Sie könnten auch gerade <View style = {styles.lineStyle} />da nichts dazwischen ist ;-)
Martin Nordström

Smit styles.lineStylewürde einem const styles = StyleSheet.create({ lineStyle: ... });hier entsprechen. Sie haben nur lineStyle = { ...}das, was ein Problem verursachen würde. Eine Komplettlösung mit styles.lineStylekönnte sein const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
Kevr

Ja. Du hast recht. Hier lineStylegehe ich davon aus, dass Sie in Ihr StyleSheet eingefügt haben.
Smit

12

Ich hatte vor kurzem dieses Problem.

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

mit diesem Ergebnis:

Bild


23
Dies skaliert nicht gut
Petrus Theron

so einfach ist das.
Siraj Alam

@PetrusTheron warum skaliert es nicht gut?
Nate Glenn

@ NateGlenn-Bindestriche werden auf einer schmalen Anzeige umbrochen oder auf einer breiteren Anzeige zu dünn angezeigt.
Petrus Theron

Ah, das macht Sinn. Ich denke, die Lösung ist in Ordnung, wenn Sie nur eine sehr kurze Leitung benötigen.
Nate Glenn

9

Ich habe es so gemacht. Hoffe das hilft

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

für Stil:

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

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

Ich denke, es ist die beste Lösung. Besser als Border wie andere Antworten.
Erick M. Sprengel

Die Hardcodierungsbreite kann ein Problem darstellen.
Mo-Gang

6

Ich konnte flexboxsogar mit einem Text in der Mitte der Linie ein Trennzeichen mit Eigenschaften zeichnen .

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

Geben Sie hier die Bildbeschreibung ein


Dies ist die beste Antwort, sie skaliert und wenn Sie keine Textbreite festlegen, wird sie dynamisch
Owen Adley

5

Sie können es auch versuchen react-native-hr-component

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

Dein Code:

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

//..

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

4
Das ist ein bisschen übertrieben
Led

3

Dies ist im JSX-Code (React Native), der bis heute aktualisiert wurde:

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

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

Sie können eine alignSelf:'stretch'oder width: "100%"beide verwenden, sollte funktionieren ... und,

borderBottomWidth: StyleSheet.hairlineWidth

hier StyleSheet.hairlineWidthist also der dünnste also

borderBottomWidth: 1,

und so weiter, um die Dicke der Linie zu erhöhen.


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>

1

Warum machst du so etwas nicht?

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

1

Sie können den nativen Elementteiler verwenden.

Installieren Sie es mit:

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

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

Dann gehen Sie mit:

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

Quelle


2
Die Installation eines ganzen Pakets (und wahrscheinlich eines großen) scheint übertrieben, wenn Sie nur eine horizontale Linie benötigen.
Sandy

Zugegeben, es ist übertrieben, wenn Sie nur die <Divider /> Komponente verwenden. Sie sollten jedoch eine Bibliothek verwenden, um Zeit beim Stylen einfacher Schaltflächen, Suchleisten usw. zu sparen react-native-elements.github.io/react-native-elements
jso1919

1

Das Erstellen einer wiederverwendbaren LineKomponente hat für mich funktioniert:

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

Jetzt Lineüberall importieren und verwenden :

<Line />


0
import {Dimensions} from 'react-native'

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

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

Der Code ist so klar für diejenigen, die diese Art von Problem haben. Wenn ich also mehr erklären kann, werde ich es tun.
Mohamed Ben Hartouz

0

So löste ich den Teiler mit horizontalen Linien und Text in der Mitte:

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

Und Stile dafür:

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

Erstellen Sie einfach eine Ansichtskomponente mit geringer Höhe.

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

0

Wenn Sie einen festen Hintergrund haben (wie Weiß), könnte dies Ihre Lösung sein:

<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',
  },
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.